Re: [問題]for迴圈和while的程式問題

看板MATLAB作者 (no pain no gain)時間12年前 (2013/05/10 14:24), 編輯推噓2(205)
留言7則, 2人參與, 最新討論串3/3 (看更多)
※ 引述《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

05/10 16:57, , 1F
M = reshape(A(:,:,k),4,4);
05/10 16:57, 1F

05/10 16:57, , 2F
因為你A(:,:,k)直接打的話是個4*4*1的array,他無法判斷要
05/10 16:57, 2F

05/10 16:58, , 3F
往哪個維度去做矩陣相乘 所以要把他像上面那樣變成4*4
05/10 16:58, 3F

05/10 17:00, , 4F
另外n2最好改成cell 因為你每個n1 size不一定一樣
05/10 17:00, 4F

05/10 17:03, , 5F
就一開始就定義n2 = cell(1,5) 然後倒數第二行就變成
05/10 17:03, 5F

05/10 17:03, , 6F
n2{3} = n1這樣
05/10 17:03, 6F

05/10 19:22, , 7F
原來是這樣,感謝您的幫忙
05/10 19:22, 7F
文章代碼(AID): #1HZ9A7_B (MATLAB)
文章代碼(AID): #1HZ9A7_B (MATLAB)