雅克比迭代法求线性方程组的根
实验二 雅可比迭代法求线性方程组的根
一、实验目的
学习用雅可比迭代法求线性方程组的解。
二、实验题目
求线性方程组
27x16x21x3856x115x22x372
xx54x110231
的根,精确到0.0001。
三、实验原理
将方程组按雅可比方法写成
2185xxx231927272224xxx 21351551155xxx123545427
由此可以得到迭代公式:
2(n)1(n)85(n1)xx2x31927272(n)2(n)24(n1)xx1x3 n = 0, 1, 2, … 251551(n)1(n)55(n1)xx1x23545427
四、实验内容
取初始向量为:x1(0)(0)(0)0,x20,x30
运行程序,记录计算结果。
五、源程序(Matlab)
clear
clc
n=input('n=');
A=input('A=');
b=input('b=');
x0=input('x0=');
x0=zeros(n,1);
x=x0;
epsilon=input('\n 精度=');
N=input('\n 最大迭代次数N=');
fprintf('\n %d:',0);
for i=1:n
fprintf('%f',x0(i));
end
%以下是迭代过程
for k=1:N
%这是第k步迭代,迭代前的向量在x0[]中,迭代后的向量在x[]中; normal=0;
for i=1:n
x(i)=b(i);
for j=1:n
if j~=i
x(i)=x(i)-A(i,j)*x0(j);
end
end
x(i)=x(i)/A(i,i);
temp=abs(x(i)-x0(i));% 求范数与迭代在同一个循环中; if temp>normal
normal=temp; %这里用的是无穷范数
end
end %第i不迭代结束
fprintf('\n %d: ',k);
for i=1:n
x0(i)=x(i); %为下一步迭代准备初值;
fprintf('%f',x(i));%输出迭代过程
end
if normal
return
end
end
fprintf('\n \n 迭代% d 次后仍未求得满足精度的解\n',N);
六、实验结果
计算结果如下:
(k)(k)(k)k x1 x2 x3
0 0.000000 0.000000 0.000000
1 3.148148 4.800000 2.037037
2 2.156927 3.269136 1.889849
3 2.491668 3.685249 1.936554
4 2.400928 3.545126 1.922650
5 2.431552 3.583275 1.926925
6 2.423232 3.570456 1.925651
7 2.426034 3.573954 1.926043
8 2.425271 3.572781 1.925926
9 2.425527 3.573101 1.925962
10 2.425458 3.572994 1.925951
11 2.425481 3.573023 1.925955
七、实验结果分析
运算结果能够满足精度要求。
雅可比迭代法算法简单,易于学习和应用。