作者HAK (no pain no gain)
看板MATLAB
标题Re: [问题]for回圈和while的程式问题
时间Fri May 10 14:24:04 2013
※ 引述《profyang (prof)》之铭言:
: ※ 引述《HAK (no pain no gain)》之铭言:
: : Matlab新手想请问关於for回圈与while组合的程式问题
: : 我的问题在於目前有一个4x4的A矩阵
: : X1的初始值为[1;0;0;0],新的X1=A*X1
: : 我想要求n次之後X1中的元素值小於0.00001,并且记录每一个X1的值
: : 因此写了下面的程式:
: : X1(1:4,1)=[1;0;0;0];
: : for j=1:100
: : while X1(1:4,1)>0.00001
: : n(j,1:4)=X1';
: : X1=A*X1;
: : end
: : end
: : 但是却进不了回圈
: : 不知可否请先进点拨一下问题出在哪里呢
: X1=[1;0;0;0];X2=X1;n=[];
: while sum(abs(X2))>0
: n=[n,X1];
: X1=A*X1;
: X2 = X1;
: X2(X2<0.00001) = 0;
: end
: 应该会动吧 我用A=0.1试过好像会动
不好意思又有问题了
假如说我的A矩阵有5个并且已经存成3维矩阵的形式
想要对这5个A矩阵做同样的事情
并且把根据不同矩阵所求得的n1存成3维矩阵n2的形式
因此写了这样的程式:
for k=1:5;
M=A(:,:,k);
X1=[1;0;0;0];X1_temp=X1;n1=[];
while sum(abs(X1_temp))>0
n1=[n1,X1];
X1=M*X1;
X1_temp = X1;
X1_temp(X1_temp<0.001) = 0;
end
n2(:,:,k)=n1;
end
但是执行的时候出现??? Subscripted assignment dimension mismatch.的讯息
可否请问该如何修改呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.134.111
1F:推 profyang:M = reshape(A(:,:,k),4,4); 05/10 16:57
2F:→ profyang:因为你A(:,:,k)直接打的话是个4*4*1的array,他无法判断要 05/10 16:57
3F:→ profyang:往哪个维度去做矩阵相乘 所以要把他像上面那样变成4*4 05/10 16:58
4F:推 profyang:另外n2最好改成cell 因为你每个n1 size不一定一样 05/10 17:00
5F:→ profyang:就一开始就定义n2 = cell(1,5) 然後倒数第二行就变成 05/10 17:03
6F:→ profyang:n2{3} = n1这样 05/10 17:03
7F:→ HAK:原来是这样,感谢您的帮忙 05/10 19:22