| 查看: 2820 | 回復(fù): 17 | ||
wangjunyahit銀蟲(chóng) (初入文壇)
|
[求助]
求Matlab高手解決線性方程組的迭代求解問(wèn)題
|
|
|
遇到一個(gè)線性方程組Ax=b的求解問(wèn)題,使用Matlab直接求解但不確定結(jié)果是否正確, 想使用迭代解法求解驗(yàn)證結(jié)果,但苦于找不到合適的迭代解法和程序,希望各位大神 給予幫助,感激涕零!! 方程組是這樣的: A=[-1.2e-21,1.4e6,1.4e6,-1.4e6,1.3e6; 8.9e-22,-1.4e6,4.9e3,3.8e3,0; 1.8e-22,1.4e3,-1.4e6,4.3e3,0; 4.4e-23,3.2e2,1.2e3,-5.1e6,4.3e3; 5.3e-23,0,0,1.3e3,-2.3e6] b=[0;-1.8e-4;-1.3e-2;-1.5e-2;-4.0e-3] 直接求解如下: x=A\b; x=[ 1.029393177754837e+20 6.565808888911404e-08 2.259822851544940e-08 3.842185487752932e-09 4.113382036189007e-09] rcond(A)=1.694258513618419e-29;矩陣A可逆的條件數(shù)估值接近0,矩陣A條件不好,得到的解有誤差 希望各位大神 給予幫助,感激涕零。! ~EZ9ND[(A@F3IUUY9EJVQ4C.jpg [ Last edited by wangjunyahit on 2012-11-24 at 16:10 ] |

新蟲(chóng) (初入文壇)
|
你學(xué)過(guò)數(shù)值分析沒(méi)有,這個(gè)可以用高斯迭代法和雅可比迭代法求解,不過(guò)雖然用迭代法,跑程序時(shí)還是有警告,可能求解還是不是非常可靠,我求解了一個(gè),下面我把高斯迭代法那個(gè)我求解用的程序和運(yùn)行結(jié)果貼在下面: function gsdd(A,b,x0,fs,wucha,ddcs) D=diag(diag(A)); U=-triu(A,1); L=-tril(A,-1); ljzx=inv(A)*b'; if det(D)==0 disp('對(duì)角矩陣D奇異,迭代不能實(shí)現(xiàn)'); return end B=(D-L)\U;f=(D-L)\b'; for k=1:ddcs x1=B*x0'+f; epsilon=norm(x1-x0',fs); wcx=norm(x1-x0',fs)/(norm(x1,fs)+eps); x0=x1'; if (epsilon end end if (epsilon>wucha)||(wcx>wucha)||k==ddcs disp(' 超過(guò)給定最大迭代次數(shù),可能不收斂 ') return end disp('迭代次數(shù):'); k disp('迭代結(jié)果:'); x=x0' disp('逆矩陣求解結(jié)果:'); x=ljzx end >> A=[-1.2e-21,1.4e6,1.4e6,-1.4e6,1.3e6; 8.9e-22,-1.4e6,4.9e3,3.8e3,0; 1.8e-22,1.4e3,-1.4e6,4.3e3,0; 4.4e-23,3.2e2,1.2e3,-5.1e6,4.3e3; 5.3e-23,0,0,1.3e3,-2.3e6]; >> b=[0;-1.8e-4;-1.3e-2;-1.5e-2;-4.0e-3]'; >> x0=[1 1 1 1 1]; >> gsdd(A,b,x0,1,10^(-15),1000) Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.694259e-029. > In gsdd at 5 Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 2.352941e-028. > In gsdd at 10 Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 2.352941e-028. > In gsdd at 10 迭代次數(shù): k = 527 迭代結(jié)果: x = 1.029393177754839e+020 6.565808888911417e-008 2.259822851544943e-008 3.842185487752933e-009 4.113382036189012e-009 逆矩陣求解結(jié)果: x = 1.029393177754837e+020 6.565808888911401e-008 2.259822851544940e-008 3.842185487752931e-009 4.113382036189006e-009 |

|
矩陣的rcond顯然可以改好啊。例如將第一列乘以4e27。 >> Anew = A; Anew(:,1) = A(:,1) *4e27;rcond(Anew) 0.0103 >>x_1= Anew\b; x_1_real = x_1; x_1_real(1) = 4e27 * x_1(1) 不過(guò)結(jié)果解還是一樣的。 |
鐵桿木蟲(chóng) (著名寫(xiě)手)
方丈大師
鐵桿木蟲(chóng) (著名寫(xiě)手)
方丈大師
銀蟲(chóng) (初入文壇)

銀蟲(chóng) (初入文壇)

銀蟲(chóng) (初入文壇)
|
謝謝您的解答,非常感激! 我之前也用過(guò)雅克比迭代和高斯賽德?tīng)柕M(jìn)行過(guò)求解另外一個(gè)類(lèi)似的方程,但是沒(méi)有收斂,不知道是不是初值選擇的問(wèn)題,麻煩您幫忙看下!謝謝!方程如下: A=[-1.070906744447462E-017 244564571.598802 303866255.019473 303856255.019473 303756255.019473 ; 9.735515836938967E-017 -437040200.438244 546168396.621813 415770404.263350 0.000000000000000E+000 ; 1.947103215071310E-017 157778358.747585 -986775896.684545 473345946.492110 0.000000000000000E+000; 4.867758037678274E-018 34697270.0918581 136741245.043259 -1333413850.81819 473345946.492110 ; 5.841309406796348E-018 0.000000000000000E+000 0.000000000000000E+000 136741245.043259 -778102201.511583 ]; b=[ 104348331231.704 -2072871.66710357 -154296552.906917 -178403143.022063 -48501206.8009638 ]'; |

新蟲(chóng) (初入文壇)
|
這個(gè)用迭代法的話驗(yàn)證的話,沒(méi)有哪一種迭代法是通用的,驗(yàn)證的話,你就用列主元消去法吧,一定程度上能控制舍入誤差.下面且用列主元消去法求解,過(guò)程貼下面: function gauss(A,b,delta) %解線性方程組 B=[A b']; [B,n]=disha(B); X=A\b'; for k=1:n if abs(B(k,k)) return end end x=(B(:,1:n))\B(:,n+1); disp('方程有有唯一解其解為:'); disp('i x(i)'); for i=1:n disp(sprintf('%d %.17e',i,x(i))); end function [A hs]=disha(A) [hs,ls]=size(A); for i=1:hs-1 s=A(:,i); [m,row]=max(abs(s(i:hs))); if A(i,i)~=m s1=A(i, ;A(i, =A(row+i-1, ;A(row+i-1, =s1;end for j=i:hs-1 % if A(j+1,i)==0 % continue % end % r=A(i,i)/A(j+1,i); %A(j+1, =A(j+1, *r-A(i, ;r=A(j+1,i)/A(i,i); A(j+1, =A(i, *r-A(j+1, ;end end end disp('逆矩陣求解結(jié)果: '); for k=1:1:5 disp(sprintf('%d %.17e',k,X(k)')); end end >> gauss(A,b,10^(-18)) Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 4.382649e-026. > In gauss at 5 Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 6.691293e-026. > In gauss at 12 方程有有唯一解其解為: i x(i) 1 8.90763948846464080e+026 2 3.22058008969693620e+002 3 8.07073018970861680e+001 4 2.39314314743592430e+001 5 1.09550426143824530e+001 逆矩陣求解結(jié)果: 1 8.90763948846463800e+026 2 3.22058008969693560e+002 3 8.07073018970861540e+001 4 2.39314314743592430e+001 5 1.09550426143824530e+001 >> |

銀蟲(chóng) (初入文壇)

新蟲(chóng) (初入文壇)

| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[碩博家園] 深圳大學(xué)碩士招生(2026秋,傳感器方向,僅錄取第一志愿) +4 | xujiaoszu 2026-03-11 | 9/450 |
|
|---|---|---|---|---|
|
[考研] 341求調(diào)劑 +5 | 搗蛋豬豬 2026-03-11 | 5/250 |
|
|
[考研] [導(dǎo)師推薦]西南科技大學(xué)國(guó)防/材料導(dǎo)師推薦 +3 | 尖角小荷 2026-03-16 | 6/300 |
|
|
[考研] 化學(xué)調(diào)劑0703 +8 | 啊我我的 2026-03-11 | 8/400 |
|
|
[考研] 070300化學(xué)學(xué)碩求調(diào)劑 +6 | 太想進(jìn)步了0608 2026-03-16 | 6/300 |
|
|
[考研] 085600調(diào)劑 +5 | 漾漾123sun 2026-03-12 | 6/300 |
|
|
[考研] 0703化學(xué)調(diào)劑,求各位老師收留 +8 | 秋有木北 2026-03-14 | 8/400 |
|
|
[考研] 285求調(diào)劑 +6 | ytter 2026-03-12 | 6/300 |
|
|
[考研] 344求調(diào)劑 +3 | knight344 2026-03-16 | 3/150 |
|
|
[考研] 復(fù)試調(diào)劑 +4 | z1z2z3879 2026-03-14 | 5/250 |
|
|
[考研] 學(xué)碩285求調(diào)劑 +13 | Wisjxn 2026-03-12 | 46/2300 |
|
|
[考研] 材料工程,326分,求調(diào)劑 +6 | KRSLSR 2026-03-10 | 6/300 |
|
|
[考研] 復(fù)試調(diào)劑 +9 | Copy267 2026-03-10 | 9/450 |
|
|
[考研] 332求調(diào)劑 +3 | zjy101327 2026-03-11 | 6/300 |
|
|
[考研] 材料與化工求調(diào)劑一志愿 985 總分 295 +8 | dream…… 2026-03-12 | 8/400 |
|
|
[考研] 求材料調(diào)劑 085600英一數(shù)二總分302 前三科235 精通機(jī)器學(xué)習(xí) 一志愿哈工大 +4 | 林yaxin 2026-03-12 | 4/200 |
|
|
[考研] 0703化學(xué)求調(diào)劑 +7 | 綠豆芹菜湯 2026-03-12 | 7/350 |
|
|
[考研] 求調(diào)劑 +7 | 18880831720 2026-03-11 | 7/350 |
|
|
[考研] 0856化學(xué)工程280分求調(diào)劑 +4 | shenzxsn 2026-03-11 | 4/200 |
|
|
[考博] 2026年博士申請(qǐng) +3 | QwQwQW10 2026-03-11 | 3/150 |
|