作者ejialan (eji)
看板MATLAB
标题Re: [问题] 矩阵相关问题
时间Fri Dec 27 12:05:54 2013
※ 引述《yayaya0415 (雅雅)》之铭言:
: 各位大大好,小女~~我是MATLAB的新手~~最近在写论文的程式,遇到问题了
: 希望各位大大可以帮帮小女的忙~~
: 以下是我遇到的问题
: Cj是一个4X5,5X6,6X7.........的矩阵
: j=0:2
: Cj的矩阵会随着j逐渐变大
: 我希望结果可以列出Cj矩阵
: C0= 4 0 0 0
: 0 4 0 0
: 0 0 4 0
: 0 0 0 4
: 0 0 0 0
: C1= 4 0 0 0 0
: 0 4 0 0 0
: 0 0 4 0 0
: 0 0 0 4 0
: 0 0 0 0 4
: 0 0 0 0 0
: C2= 4 0 0 0 0 0
: 0 4 0 0 0 0
: 0 0 4 0 0 0
: 0 0 0 4 0 0
: 0 0 0 0 4 0
: 0 0 0 0 0 4
: 0 0 0 0 0 0
: 以上是我的问题
: 目前我是用笨方法~
: 已知mu2=4
: for i=1:8;
: CBIG(i,i)=mu2;
: end
: C0= CBIG(3:8,3:7)
: C1= CBIG(2:8,2:7)
: 我设一个大的C矩阵 叫CBIG 从中撷取一小部份我要的C0.C1小矩阵
: 未来矩阵要更大 这种笨方法~~~~~~不行了~~
: 所以请各位大大帮帮小女!!!小女感激不尽!!!!!!!!!!!!!!!!
抓到规则就可以暴力把C0到Cn都产生出来
以下产生到C5
for i=0:5
eval(['C',num2str(i),'=diag(ones(',num2str(i),'+5,1)*mu);']);
eval(['C',num2str(i),'(:,end)=[];']);
end
而你原本产生大矩阵再撷取也不算笨方法
这样效率反而更好
CBIG=diag(ones(5+5,1)*mu);
for i=0:5
eval(['C',num2str(i),'=CBIG(1:i+5,1:i+4);'])
end
另外以你的矩阵型态
或许可以考虑宣告稀疏矩阵
或者是乾脆不宣告矩阵直接抓指标计算
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.121.146.175
1F:推 yayaya0415:谢谢你 我已经成功试出来了 你的回答对我很有帮助 12/27 16:48