[問題] 高斯消去法的問題已回收

看板MATLAB作者 (I am moron)時間15年前 (2011/04/05 23:13), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串1/1
最近寫作業求逆矩陣用高斯消去法 個人有寫出來一點,可是卻有一個蠻嚴重的BUG 知道問題出在哪,可是想了很久不知道如何去解決 想問說有沒有方法可以DE這個BUG,還有不能用函數inv或是rref 個人有參考過rref的M檔,不過看不懂原理XD clear,clc; %清除變數 k=randperm(9)+1; %產生亂數維度K(K範圍從2~10) k=k(1); %取出k的第一個位置的值 A=round(10*rand(k,k))+1; %隨機產生一個k*k的矩陣(元素1~11) if det(A) == 0 %如果det=0,她就沒有反矩陣 fprintf('singular') %秀出singular else A=[A eye(k)]; %把單位矩陣跟A結合 for i=0:k-2 %雙重迴圈i處理列,j處理行 for j=2:k A(i+j,:)=A(i+1,:)*-A(j+i*(k+1))/A(1+i*(k+1))+A(i+j,:) %假設k=3,那麼一開始i=0 j=2 %A(2,:)=A(1,:)*-A(2)/A(1)+A(2,:) %接下來i=0 j=3 %A(3,:)=A(1,:)*-A(3)/A(1)+A(3,:) %但是當i=1 j=3的時候 %A(4,:)=A(2,:)*-A(7)/A(5)+A(4,:) =>超出矩陣 end end for i=0:k-1 A(i+1,:)=A(i+1,:)/A(1+i*(k+1)) %把對角線都化成1 %A(1,:)=A(1,:)/A(1); %A(2,:)=A(2,:)/A(2+k); end end -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.110.121.50

04/06 05:15, , 1F
誰教你這樣用eval的.....
04/06 05:15, 1F
一說發現EVAL是多餘的,改一下

04/06 11:16, , 2F
你的 A 是 vector 還是 matrix? 這樣混用很容易出問題..
04/06 11:16, 2F
matrix

04/06 13:04, , 3F
既然是 matrix, 要取用還是要乖乖寫上兩個維度比較好...
04/06 13:04, 3F

04/06 13:05, , 4F
直接寫 A(7) 比較容易把事情搞亂.@@
04/06 13:05, 4F
有點聽不懂XD ※ 編輯: iammoron 來自: 123.110.116.140 (04/06 13:58)

04/06 14:50, , 5F
我再看了一下rref,應該用while不是for
04/06 14:50, 5F

04/06 14:50, , 6F
while (i <= k) && (j <= 2*k)
04/06 14:50, 6F
文章代碼(AID): #1Dcp6Qaw (MATLAB)
文章代碼(AID): #1Dcp6Qaw (MATLAB)