matlab中线性方程组Ax=b求解方法众多,容易糊涂,这里对各种方法进行概述:
1、求逆法
x = A \ b 或 x=inv(A) * b
以下是矩阵分解法:
2、LU分解
[L, U] = lu(A) 使得 A=LU 即 x=U\(L\b)
[L, U, P] = lu(A) 使得 PA = U 其中P为置换阵 即 x=U\(L\P*b)
3、QR分解
[Q, R]=qr(A) 使得 A=QR 即 x=R\(Q\b)
[Q, R, E]=qr(A) 使得 AE=QR 其中E为置换阵 即 x=E(R\(Q\b) )
4、奇异值分解SVD
[U, S, V] = svd(A) 使得 A=U * S * V' 即 x= V*inv(S) * U' *b
5、Hessenbeg分解
[P, H]=hess(A) 使得 A=P*H*P' 即 x=P * inv(H) * P' * b
6、Schur分解
[U, T] = schur(A) 使得 A=U * T* U' 即 x= U * inv(T) * U' * b
以下是迭代法;
7、逐次逼近法
8、理查森迭代法
x = (I - A)x + b
[ x, n] = richason(A, b, x0, eps, M)
9、Jacobi迭代法
D是由A的主对角元素组成的对角阵,则有:
B= I - inv(D) * A r = inv(D) * b x = B x + r
[x, n]=jacobi(A, b, x0, eps, varargin)
10、Gauss-Seidel迭代法
A=(D-L)-U D意义同上,L为下三角矩阵, U为上三角矩阵
x= inv(D-L) * U * x + inv(D-L) * b
[x, n] = gauseidel(A, b, x0, eps, M)
11、超松弛迭代法
对以上选 A =(D - wL)-((1-w)D +wU) 则有 x = inv(D- wL) * [ (1-w)D +wU]x + w* inv(D-wL) * b
[x, n] = SOR(A, b, x0, w, eps, M)
12、逐次超松弛迭代法 SSOR
[x, n] = SSOR(A, b, x0, w, eps, M)
13、两边迭代法
[x, n] = twostep(A, b, x0, eps, varargin)
14、梯度法
(1) 最速下降法
[x, n]=fastdown(A, b, x0, eps)
(2)共轭梯度法
[x, n] = conjgrad(A, b, x0)
(3)预处理的共轭梯度法
其它迭代法
15、 x=symmlq(A,b) 线性方程组的LQ算法
16、 x=bicg(A,b) 线性方程组的双共轭梯度解法
17、 x=bicgstab(A,b) 线性方程组的稳定双共轭梯度算法
18、 x=lsqr(A,b) 线性方程组的共轭梯度的LSQR解法
19、 x=gmres(A,b) 线性方程组的广义最小残差解法
20、 x=minres(A,b) 线性方程组的最小残差解法
21、 x=qmr(A,b) 线性方程组的准最小残差解法