Jacobi迭代法matlab程序(《数值分析原理》)
1、Jacobi迭代格式
Jacobi迭代法是常见的几种迭代法之一,迭代格式如下图所示:(图片来自CHD的ztl老师的PPT)(具体内容详见《数值分析原理》)
2、Jacobi迭代法的例子
该例子使用matlab的命令文件格式,命名为jacobi.m。
举例:设有方程组
取初始向量为x(0)=(-3,1,1)(T),用Jacobi方法求解,要求||x(k+1)-x(k)||小于等于10……(-3)。
% 题目信息
% A为线性方程组的系数矩阵
A=[5 2 1;-1 4 2;2 -3 10];
% b为常系数 x为初始向量
b=[-12;20;3];
x=[-3;1;1];
% epslion为误差值
epslion=0.001;
% N为自己设置的迭代次数
N=20;
% 公式
L=tril(A,-1); %L为A的单位下三角矩阵
D=diag(diag(A)); %D为A的对角矩阵
U=triu(A,1); %U为A的上三角矩阵
B=-D\(L+U); %B为迭代矩阵
g=D\b;
error=1;
n=0;
for i=1:N
while error>epslion && n<N
y=x;
x=B*x+g;
error=norm(y-x,inf); %可以使用任何范数,此处使用无穷范数(结果是一样的)
if error>epslion
n=n+1;
fprintf('第%d次jacobi迭代结果为:',n)
disp(x);
fprintf('第%d次迭代结果的误差为:\n',n);
disp(error)
break
end
if error<=epslion
n=n+1;
fprintf('第%d次jacobi迭代结果为:',n)
disp(x);
fprintf('第%d次迭代结果的误差为:\n',n);
disp(error);
fprintf('该方程组的jacobi迭代法的最小迭代次数为:')
disp(n);
break
end
end
end
执行结果:
>> jacobi
第1次jacobi迭代结果为:
-3.0000
3.7500
1.2000
第1次迭代结果的误差为:
2.7500
第2次jacobi迭代结果为:
-4.1400
3.6500
2.0250
第2次迭代结果的误差为:
1.1400
第3次jacobi迭代结果为:
-4.2650
2.9525
2.2230
第3次迭代结果的误差为:
0.6975
第4次jacobi迭代结果为:
-4.0256
2.8223
2.0387
第4次迭代结果的误差为:
0.2394
第5次jacobi迭代结果为:
-3.9367
2.9742
1.9518
第5次迭代结果的误差为:
0.1520
第6次jacobi迭代结果为:
-3.9800
3.0399
1.9796
第6次迭代结果的误差为:
0.0657
第7次jacobi迭代结果为:
-4.0119
3.0152
2.0080
第7次迭代结果的误差为:
0.0318
第8次jacobi迭代结果为:
-4.0077
2.9930
2.0069
第8次迭代结果的误差为:
0.0222
第9次jacobi迭代结果为:
-3.9986
2.9946
1.9994
第9次迭代结果的误差为:
0.0091
第10次jacobi迭代结果为:
-3.9977
3.0006
1.9981
第10次迭代结果的误差为:
0.0060
第11次jacobi迭代结果为:
-3.9999
3.0015
1.9997
第11次迭代结果的误差为:
0.0021
第12次jacobi迭代结果为:
-4.0006
3.0002
2.0004
第12次迭代结果的误差为:
0.0014
第13次jacobi迭代结果为:
-4.0002
2.9996
2.0002
第13次迭代结果的误差为:
5.1691e-04
该方程组的jacobi迭代法的最小迭代次数为: 13
(内容为自己的尝试,若有错漏或改进方法请多多指正啦~)