雅克比迭代法介紹以及matlab代碼實現-線性方程組求解


大綱


 

一、前沿   

 談到雅克比迭代法,首先就談下迭代法的基本原理

     設線性方程組

                                      Ax = b

 系數矩陣A為n階非奇異矩陣(|A|≠0,且右端常數項向量b≠0,則將上式改寫為

                                    x = Bx +f

采用迭代的思想:    x^{k+1} = B*x^{k+1} +f   k=0,1,2...,n

其基本思想是將A拆分成如下

                                       A = M-N

此時 B=M^(-1)*N = M^(-1) = I - M^(-1)*A   ,f = M^(-1)*b .(注:I 是單位矩陣)

          X^(K+1) = I -  M^(-1)*A + M^(-1)*b 

二、雅克比迭代法

     就上拆分的思想,將n階線性方程組  Ax =b拆分成(A = (aij)nxn ,且aij≠0)

                                     A = D + L +U                

其中

   

則根據aij≠0,則D^(-1) 存在,則將線性方程組 AX=B 改為

                                               x=-D^(-1)*(L+U)*x + D^(-1)*b

由此得到迭代公式

                                              x^(k+1)=-D^(-1)*(L+U)*x^(k+1) + D^(-1)*b

證明:標注為粉紅的公式

                               由 Ax = b ,將A=D+L+U代如得,

                                (D+L+U)x = b

                                  Dx+(L+U)x = b

                                  Dx = -(L+U)x + b

                                  x = D^(-1)*(L+U)*x + D^(-1)*b   

證畢。

 

將   x=-D^(-1)*(L+U)*x + D^(-1)*b 展開

 

 

...

最終結果為:

                         

 

三、Matlab 雅克比迭代程序

具體程序如下所示:

clear; 
A=input('請輸入線性方程組的系數矩陣:'); 
b=input('請輸入線性方程組的常向量:'); 
x1=input('請輸入解向量的初始值:'); 
n=numel(b); 
 
e_max=1e6;       %%前一次和后一次之差
while e_max>=1e-6 
    e_max=0; 
    for i=1:n 
        s=0;           %%初始化變量
        for j=1:n 
            if j~=i 

                s=s+A(i,j)*x1(j); 
            end 
        end 
        x2(i) = (b(i)-s)/A(i,i); 
        e = abs(x2(i)-x1(i));     
        if e > e_max  
            e_max = e; 
        end 
    end 
    x1=x2      %%不帶分號,觀察每步迭代結果 
end 

 

測試矩陣

A = [10 -1 -2;-1 10 -2;-1 -1 5];

b= [72 83 42];

迭代初值x(0) =  [0 0 0];

調試結果

 

  時間: 無論往生或今生來生,最重要的是現在。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM