雅克比迭代法介绍以及matlab代码实现-线性方程组求解
Posted Sophiaecho
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了雅克比迭代法介绍以及matlab代码实现-线性方程组求解相关的知识,希望对你有一定的参考价值。
1).前沿
谈到雅克比迭代法,首先就谈下迭代法的基本原理
设线性方程组
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
2).雅克比迭代法
就上拆分的思想,将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 展开
...
最终结果为:
3).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];
调试结果
以上是关于雅克比迭代法介绍以及matlab代码实现-线性方程组求解的主要内容,如果未能解决你的问题,请参考以下文章