文档介绍:第7章 MATLAB 解方程与函数极值 线性方程组求解 非线性方程数值求解 常微分方程初值问题的数值解法 函数极值 线性方程组求解 直接解法 Ax =b,可以利用左除运算符“\”求解: x=A \b 例 7-1 用直接解法求解下列线性方程组。命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; x=A\b 。常见的矩阵分解有 LU 分解、 QR 分解、 Cholesky 分解,以及 Schur 分解、 Hessenberg 分解、奇异分解等。(1) LU 分解矩阵的 LU 分解就是将一个矩阵表示为一个交换下三角矩阵和一个上三角矩阵的乘积形式。线性代数中已经证明,只要方阵 A是非奇异的, LU 分解总是可以进行的。 MATLAB 提供的 lu函数用于对矩阵进行 LU 分解,其调用格式为: [L,U]= lu(X ):产生一个上三角阵 U和一个变换形式的下三角阵 L(行交换),使之满足 X=LU 。注意,这里的矩阵 X必须是方阵。[L,U,P]= lu(X ):产生一个上三角阵 U和一个下三角阵 L以及一个置换矩阵 P,使之满足 PX=LU 。当然矩阵 X同样必须是方阵。实现 LU 分解后,线性方程组 Ax=b 的解 x=U\(L\b) 或 x=U\(L\ Pb ),这样可以大大提高运算速度。例 7-2 用 LU 分解求解例 7-1 中的线性方程组。命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; [L,U]= lu(A ); x=U\(L\b) 或采用 LU 分解的第 2种格式,命令如下: [L,U ,P]= lu(A ); x=U\(L\P * b) (2) QR 分解对矩阵 X进行 QR 分解,就是把 X分解为一个正交矩阵 Q和一个上三角矩阵 R的乘积形式。 QR 分解只能对方阵进行。 MATLAB 的函数 qr可用于对矩阵进行 QR 分解,其调用格式为: [Q,R]= qr(X ):产生一个一个正交矩阵 Q和一个上三角矩阵 R, 使之满足 X=QR 。[Q,R,E]= qr(X ):产生一个一个正交矩阵 Q、一个上三角矩阵 R以及一个置换矩阵 E,使之满足 XE=QR 。实现 QR 分解后,线性方程组 Ax=b 的解 x=R\(Q\b) 或 x=E(R\(Q\b)) 。例 7-3 用 QR 分解求解例 7-1 中的线性方程组。命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; [Q,R]= qr(A ); x=R\(Q\b) 或采用 QR 分解的第 2种格式,命令如下: [Q,R,E]= qr(A ); x=E * (R\(Q\b)) (3) Cholesky 分解如果矩阵 X是对称正定的,则 Cholesky 分解将矩阵 X分解成一个下三角矩阵和上三角矩阵的乘积。设上三角矩阵为 R, 则下三角矩阵为其转置,即 X=R'R 。 MATLAB 函数 chol(X ) 用于对矩阵 X进行 Cholesky 分解,其调用格式为: R= chol(X ):产生一个上三角阵 R,使 R'R=X。若 X为非对称正定,则输出一个出错信息。[ R,p ]= chol(X ):这个命令格式将不输出出错信息。当 X为对称正定的,则 p=0 ,R与上述格式得到的结果相同;否则 p 为一个正整数。如果 X为满秩矩阵,则 R为一个阶数为 q=p-1 的上三角阵,且满足 R'R=X(1:q,1:q) 。实现 Cholesky 分解后,线性方程组 Ax=b 变成 R‘ Rx =b ,所以 x=R\(R ’\b) 。例 7-4 用 Cholesky 分解求解例 7-1 中的线性方程组。命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; R= chol(A ) ??? Error using ==> chol Matrix must be positive definite 命令执行时,出现错误信息,说明 A为非正定矩阵。