雅可比迭代公式的matlab代码实现
function x=agui_jacobi(a,b)
n=length(b);
N=100;
e=10^(-4);
x0=zeros(n,1);
x=x0;
x0=x+2*e;
k=0;
d=diag(diag(a));
l=-tril(a,-1);
u=-triu(a,1);
while norm(x0-x,inf)>e&k<N
k=k+1;
x0=x;
x=inv(d)*(l+u)*x+inv(d)*b;
k
disp(x')
end
if k==N warning('已达到最大迭代次数');end
例如求
a=[5 2 1;-1 4 2;2 -3 10]
b=[-12;20;3]
x=agui_jacobi(a,b)
得到结果
a =
5 2 1
-1 4 2
2 -3 10
b =
-12
20
3
k =
1
-2.4000 5.0000 0.3000
k =
2
-4.4600 4.2500 2.2800
k =
3
-4.5560 2.7450 2.4670
k =
4
-3.9914 2.6275 2.0347
k =
5
-3.8579 2.9848 1.8865
k =
6
-3.9712 3.0922 1.9670
k =
7
-4.0303 3.0237 2.0219
k =
8
-4.0139 2.9815 2.0132
k =
9
-3.9952 2.9900 1.9972
k =
10
-3.9954 3.0026 1.9960
k =
11
-4.0002 3.0031 1.9999
k =
12
-4.0012 3.0000 2.0010
k =
13
-4.0002 2.9992 2.0002
k =
14
-3.9997 2.9998 1.9998
k =
15
-3.9999 3.0002 1.9999
k =
16
-4.0000 3.0001 2.0000
k =
17
-4.0000 3.0000 2.0000
k =
18
-4.0000 3.0000 2.0000
x =
-4.0000
3.0000
2.0000