資源描述:
《方程及方程組解法》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第八講方程及方程組解法本講教學(xué)目標(biāo)掌握線性方程解法掌握線性方程組的直接解法掌握線性方程組的迭代解法了解非線性方程和方程組的函數(shù)解法了解非線性方程和方程組的迭代解法線性方程組的求解不僅在工程技術(shù)領(lǐng)域涉及,而且在其他許多領(lǐng)域也經(jīng)常碰到,因此它的應(yīng)用相當(dāng)廣泛。線性方程組的解法一般分為兩類:一類是直接法,另一類是迭代法。非線性方程組的解法主要采用迭代法求解,常用的有不動點(diǎn)迭代法、牛頓迭代法和Broyden迭代法等幾種。8.1線性方程及方程組的解法8.1.1線性方程的解法通過調(diào)用函數(shù)roots求解。例1求解方程的根。>>p=[1,-6,-72,-27]>>r=roots(p)p=1-6
2、-72-27r=12.1229-5.7345-0.38848.1.2線性方程組的解法1.直接解法(1)利用左除和右除運(yùn)算符。通過這兩個(gè)運(yùn)算符,程序會自動根據(jù)輸入的系數(shù)矩陣判斷選用哪種方法進(jìn)行求解。對線性方程組Ax=b,利用左除運(yùn)算符“”求解:x=Ab右除同樣。例2:求解以下方程組。>>a=[12;23];>>b=[8;13];>>x=abx=2.00003.0000(2)利用矩陣分解方法①LU分解將非奇異的方陣分解為一個(gè)下三角矩陣L和一個(gè)上三角矩陣U的乘積,即A=L*U。Ax=b可變換為x=U(Lb)或x=U(LPb)分解格式:[L,U]=lu(A)——產(chǎn)生三角陣
3、U和下三角陣L。[L,U,P]=lu(A)——產(chǎn)生三角陣U和下三角陣L以及一個(gè)置換矩陣P。②QR分解:把矩陣A分解為一個(gè)正交矩陣Q和一個(gè)上三角矩陣R的乘積,即A=Q*R。Ax=b可變換為x=R(Qb)或x=E(R(Qb))分解格式:[Q,R]=qr(A)——產(chǎn)生正交陣Q和上三角陣R。[Q,R,E]=qr(A)——產(chǎn)生正交陣Q、上三角陣R及置換陣E。③Cholesky分解:把對稱正定的矩陣A分解成一個(gè)上三角矩陣R和其轉(zhuǎn)置矩陣R’的乘積,即A=R‘R。Ax=b可變成x=R(R’b)分解格式:R=chol(A)——產(chǎn)生一個(gè)上三角陣R。[R,p]=chol(A)——A對稱正
4、定時(shí),p=0;否則p為一個(gè)正整數(shù)。如果A滿秩,則R為一個(gè)階為p-1的上三角陣,且滿足R‘R=A(1:p-1,1:p-1)。例3:求解方程組。>>a=[12-33;-163-1;111];>>b=[15;-13;6];>>[L,U]=lu(a);>>x=U(Lb)x=1.00002.00003.00002.迭代解法迭代解法適合求解大型系數(shù)矩陣的方程組。迭代解法主要包括:Jacobi迭代法Gauss-Serdel迭代法超松弛迭代法兩步迭代法(1)Jacobi迭代法對線性方程組Ax=b,若A為非奇異方陣,則可分解A=D-L-U,其中D為對角陣,其元素為A的對角元素,L、U為A的下
5、三角陣和上三角陣,Ax=b可化為x=D-1(L+U)x+D-1b。對應(yīng)的迭代公式為:x(k+1)=D-1(L+U)x(k)+D-1b如果序列{x(k+1)}收斂于x,則x必是方程Ax=b的解。function[y,n]=jacobi(A,b,x0,eps)ifnargin==3eps=1.0e-6;elseifnargin<3errorreturnendD=diag(diag(A));%求A的對角矩陣L=-tril(A,-1);%求A的下三角陣U=-triu(A,1);%求A的上三角陣B=D(L+U);f=Db;y=B*x0+f;n=1;%迭代次數(shù)whilenorm(y-x
6、0)>=epsx0=y;y=B*x0+f;n=n+1;endJacobi迭代法的Matlab函數(shù)文件Jacobi.m如下:例4:用Jacobi迭代法求解線性方程組。設(shè)迭代初值為0,迭代精度為10-6。在命令中調(diào)用函數(shù)文件Jacobi.m,命令如下:A=[10,-1,0;-1,10,-2;0,-2,10];b=[9,7,6]';[x,n]=jacobi(A,b,[0,0,0]',1.0e-6)(2)Gauss-Serdel迭代法將Jacobi迭代公式Dx(k+1)=(L+U)x(k)+b改為Dx(k+1)=Lx(k+1)+Ux(k)+b,得到:x(k+1)=(D-L)-1Ux(k
7、)+(D-L)-1b即Gauss-Serdel迭代公式。和Jacobi迭代相比,Gauss-Serdel迭代用新分量代替舊分量,精度會高些。function[y,n]=gauseidel(A,b,x0,eps)ifnargin==3eps=1.0e-6;elseifnargin<3errorreturnendD=diag(diag(A));%求A的對角矩陣L=-tril(A,-1);%求A的下三角陣U=-triu(A,1);%求A的上三角陣G=(D-L)U;f=(D-L)b;y=G*x0