MATLAB中T8为一个6*6的细胞矩阵,A=magic(6);Q=T8{:,:}.*A(:,:)';

即我想让一个细胞矩阵(T8)乘以一个数值矩阵A并生成一个新的细胞矩阵Q,可无论是.*还是*为什么都实现不了呢,老是提示??? Error using ==> times Too many input arguments.高手帮帮忙啊,谢谢啦

细胞矩阵是不能和普通矩阵相乘的。如果非要把一个细胞矩阵和普通矩阵相乘,必须用cell2mat函数把细胞矩阵转换成普通矩阵。但这种转换是有条件的,就是细胞中各元素的类型必须相同,细胞元素的维数也必须相同!例如:

a={[1 2],[2 3];[3 4],[4 5]}
b=cell2mat(b)

则结果为
b =

1 2 2 3
3 4 4 5

这时b的维数和原来细胞矩阵的维数不同!这也是转换过程应该注意的问题!

希望对你有所帮助,欢迎提问!追问

不行啊,我的细胞矩阵里每一个小矩阵都是101*101的小矩阵,这样一展就乱套了....我想做的的是T8{i,j}乘以A中对应的A(i,j)以生成一个新的细胞矩阵

追答

不能直接相乘,可以这样

n=size(T8);
for i=n(1)
for j=n(2)
temp(i,j)=T8{i,j}*A(i,j);%temp中存放相乘结果
end
end

追问

我倒是也写了一个用循环来实现的,可是老师说这样效率不高,看看能不能用矩阵运算来改进,试了试不行,嘿嘿,还是很谢谢你!
可以再问你一个别的问题吗?在matlab中怎样把一个n维矩阵转换成一个有n*n个元素的向量,是有要求的,转换不是直接的用reshape,得有一定规律(基本按各顺序主子式的反对角线展开的)如若A为一个3阶矩阵,则展开按A(1,1)A(1,2)A(2,1)A(1,3)A(2,2)A(3,1)A(2,3)A(3,2)A(3,3)的顺序展成一个向量。谢谢

追答

解决方法如下:

B=fliplr(A);
n=size(B);
C=[];
for i=(n(2)-1):-1:-(n(1)-1)
temp=diag(B,i);
C=[C;temp];
end
C

其实学好一门语言,不是要记住所有的函数,精通多么复杂的技巧,而是要学习这门语言解决问题的思想。只有领悟了它的思想,才能高效地解决问题。其实学习matlab不必要看太多的书,记太多的函数(函数你是记不完的),要学会利用matlab提供的帮助!
上面的代码很简单,我没有写注释。你没见过的函数可以试着查查帮助文件

温馨提示:答案为网友推荐,仅供参考
相似回答