作者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