广西网站建设代理加盟,济南网站建设哪里便宜,seo推广内容,知名网站建设公司线性方程组求解方法2.1 求逆法实现方式例子2.2 分解法LU分解#xff08;Doolittle分解#xff09;实现方法例子QR分解法实现方法例子Cholesky 分解法实现方法例子奇异值分解法实现方法例子Hessenberg 分解实现方法例子Schur 分解实现方法例子2.3 迭代法逐次迭代法里查森迭代法…
线性方程组求解方法2.1 求逆法实现方式例子2.2 分解法LU分解Doolittle分解实现方法例子QR分解法实现方法例子Cholesky 分解法实现方法例子奇异值分解法实现方法例子Hessenberg 分解实现方法例子Schur 分解实现方法例子2.3 迭代法逐次迭代法里查森迭代法迭代公式实现方法例子在自然科学和工程技术中很多问题可以归结为求解线性方程组。采用MATLAB,不仅可以利用其提供的相关函数直接解决一些简单的线性方程组而且可以通过简洁的编程来解决一些复杂的线性方程组。 个人学习笔记所有例子在.m文件中可实现不可实现会添加说明
2.1 求逆法 MATLAB 中求解线性方程最直接的方法是矩阵求逆法它适用于系数矩阵的数据无规律且系数矩阵的阶数比较小的情况。 实现方式
1. 直接用左除法
2. 使用求逆函数inv()例子 A [1 2 3;-1 3 7;9 0 3];
b [1 4 7];
x1 A\b %左除
x2 inv(A)*b %求逆函数2.2 分解法 矩阵分解法是指根据一定的原理用某种算法将系数矩阵分解成若干个矩阵的代数运算常用的分解是乘积分解而分解后的新矩阵一般是某种特殊矩阵。 常用的分解有LU分解、QR 分解、Cholesky 分解、Schur 分解、Hessenberg 分解和奇异分解等。 LU分解Doolittle分解 它是将矩阵分解为一个单位下三角矩阵与上三角矩阵的乘积。只要矩阵非奇异这种分解总是可以进行的。 实现方法
1. lu函数
2. [L,U] lu(A) %上三角矩阵U和下三角矩阵L,且有X LU
3. [L,U,P] lu(A) %上三角矩阵U和下三角矩阵L,置换矩阵P且有PA LU例子 A [1.5 3 -0.8 4;2 0 9 10;-7 4.8 -0.6 1;14 12.3 -4 5];
b [4 0 1 -2];
[L,U] lu(A);
x U\(L\b)QR分解法 矩阵的QR分解就是把矩阵分解为一个正交矩阵和一个上三角矩阵的乘积。 实现方法
1. [Q,R] qr(X) %产生一个正交矩阵Q和一个上三角阵R,使得XQR ;
2. [Q,R,E] qr(X) %产生一个正交矩阵Q,一个上三角阵R以及一个置换矩阵E,使得XEQR例子 A [1 0.5 0.3333 0.25;0.5 0.3333 0.25 0.2; 0.3333 0.25 0.2 0.1667;0.25 0.2 0.1667 0.1429];
b [1 2 2 1];
[Q,R] qr(A);
x R\(Q\b)Cholesky 分解法 系数矩阵AAA正定且对称它能分解为以下的形式ARTRAR^TRARTR 。其中RRR 为上三角矩阵RTR^TRT 为RRR 的转置是下三角矩阵这种分解称为CholeskyCholeskyCholesky分解。如果XXX对称正定则p0p0p0否则 ppp 为一正整数。如果XXX 满秩 RRR 是为p−1p-1p−1阶的上三角矩阵且有RTRX(1:(p−1),1:(p−1))R^TRX(1:(p-1),1:(p-1))RTRX(1:(p−1),1:(p−1))实现分解后方程组的解写成xR(R’\b) 的形式。 实现方法
1.Rchol(X) %对X进行Cholesky 分解使得$XR^TR$;
2.[R,p]chol(X) %对X进行Cholesky 分解使得$XR^TR$;例子 A[9 -36 30;-36 192 -180;30 -180 180];
bones(3,1);
Rchol (A)
XR\(R\b)注意
%矩阵A正定但不对称时程序同样能跑出来但这时我们验证一下发现“RR不等于A”
A[9 -36 30;-36 192 -180;31 -180 180];
bones(3,1);
Rchol (A) %输出R矩阵
R %输出矩阵R的转置
A %输出矩阵A
B R*R %验证矩阵B是否等于矩阵A看结果
XR\(R\b) %输出解向量奇异值分解法 奇异值分解很有用将系数矩阵进行奇异值分解以后AAA 的奇异值都在SSS的对角线上这样就可以粗略估计AAA的条件数看看AAA是否是病态矩阵以此决定相应的求解方法如果系数矩阵对称那么奇异值分解后的UUU和VVV都是正交矩阵而SSS是对角矩阵这样求解方程就十分方便。 实现方法
[U,S,V] svd(A) %奇异值分解使得AU*S*V例子 A[ 1.0000 0.5000 0.3333 0.2500 0.2000;0.5000 0.3333 0.2500 0.2000 0.1667; 0.3333 0.2500 0.2000 0.1667 0.1429; 0.2500 0.2000 0.1667 0.1429 0.1250;0.2000 0.1667 0.1429 0.1250 0.1111];
[U,S,V]svd(A)
b[1 0 1 0 1];
x1V*inv(S)*U*b %函数求逆
x2V/S*U*b %左除求逆Hessenberg 分解 Hessenberg 矩阵指的是第一子对角线以下的元素为0的矩阵。Hessenberg 分解法分解后产生正交矩阵和Hessenberg 矩阵正交矩阵的逆就是其转置 如果系数矩阵对称的话产生的Hessenberg矩阵就是三对角矩阵这种矩阵的求逆速度也很快因此用这种方法求解线性方程组很快。 实现方法
[P,H] hess(A) %Hessenberg分解,使得A P*H*P,其中P为酉矩阵例子 A[1 1 1 1;1 2 3 4;1 3 6 10;1 4 10 20];
b [1 4 7 -2];
[P,H] hess(A)
x P/H*P*bSchur 分解
实现方法 Schur 矩阵是上三角阵且其对角元素为被分解矩阵的特征值。Schur 分解法在分解后产生正交矩阵和Schur 矩阵如果系数矩阵对称的话产生的Schur 矩阵就是对角阵显然对角阵的逆矩阵非常容易得到因此用这种方法求解线性方程组也很快。 [U,T] schur(A) %Schur分解使得AU*T*U,其中U为正交矩阶T为Schur矩阵例子 tic %计时器-头部
A[1 1 1 1;1 2 3 4;1 3 6 10;1 4 10 20];
b [1 4 7 -2];
[U,T] schur(A)
x U/T*U*b
toc %计时器-结尾2.3 迭代法 适用于阶数很高或零元素多的矩阵迭代法是将求一组解转换为求一个近似解序列的过程并用最终的近似解来逼近真实解。迭代法需要考虑以下3个重要的问题。 (1) 迭代的初始值 (2) 迭代算法 (3) 迭代的收敛性 逐次迭代法 里查森迭代法
迭代公式
xk1(I−A)xkbx _ { k 1 } ( I - A ) x _ { k } bxk1(I−A)xkb
实现方法
[x,n] richason(A, b, xO, eps, M) %用里查森迭代法求线性方程组Axb的解。function [x,n]richason(A,b,x0,eps,M)
% 采用里查森迭代法求线性方程组Axb的解
% 线性方程组的系数矩阵 A
% 线性方程组中的常数向量 b
% 迭代初始向章 x0
% 解的精度控制 eps
% 迭代步数控制 M
% 线性方程组的解 x
% 求出所需精度的解实际的迭代步数 n
if(nargin 3)eps 1.0e-6 ; % eps 表示迭代精度M 200; % M 表示迭代步数的限制值
elseif(nargin 4)M 200;
end
I eye(size(A));
x1 x0;
x(I-A)*x0b;
n 1;
%迭代过程
while(norm(x-x1)eps)x1 x;x (I-A)*x1b;n n 1;if(n M)disp(warnning:迭代次数太多可能不收敛);return;end
end例子 A [1.017 -0.0092 -0.0095;-0.0092 0.9903 0.0136;-0.0095 0.0136 0.9898];
b [1 0 1];
x0 [0 0 0];
[x,n] richason(A,b,x0)