文档介绍:数值分析实验报告
姓名: XXX
学号: XXXXXXXX
学院: XXXXXXXX
老师: XXXX
实验一
一、实验内容
,设置精度为10-6。
二、实验公式
1、雅克比迭代法
雅克比迭代法的基本思想:设方程组的系数矩阵的对角线元素,根据方程组推导出一个迭代公式,然后将任意选取的一初始向量代入迭代公式,求出,再以代入同一迭代公式,求出,如此反复进行,得到向量序列。当收敛时,其极限即为原方程组的解。
2、高斯塞德尔迭代法:
在雅可比(Jacobi)迭代法中,如果当新的分量求出后,马上用它来代替旧的分量,则可能会更快地接近方程组的准确解。基于这种设想构造的迭代公式称为高斯-塞德尔(Gauss-Seidel)迭代法。算法可相应地从雅可比(Jacobi)迭代法改造得到。
3、两种迭代法的公式
(1)雅可比迭代法: xi(k+1)=1/aii(bi-Σaijxj(k))
(2)高斯-塞德尔迭代法: xi(k+1)=1/aii(bi-Σaijxj(k+1)-Σaijxj(k))
三、实验程序
1、雅克比迭代法的程序
>>format long; %设置为长格式显示,显示15位小数
A=[8 -3 2;4 11 -1;6 3 12]; %输入系数矩阵
b=[20 33 36]';
e=; %控制误差
n=max(size(A)); %测定维数
for m=1:n
if A(m,m)==0
'对角元为零,不能求解'
return
end
end
x=zeros(n,1); %设置初始解
k=0; %预设迭代次数为0
kend=50; %最大迭代次数为50
r=1; %前后项之差的无穷范数,初始值设为1
while k<=kend&r>e %达到预定精度或迭代超过50次推出计算
x0=x; %几下前次近似解
for m=1:n
s=0;
for l=1:m-1
s=s+A(m,l)*x0(l);
end
for l=m+1:n
s=s+A(m,l)*x0(l);
end
x(m)=b(m)/A(m,m)-s/A(m,m);
end
r=norm(x-x0,inf); %重新计算前后项之差的无穷范数
k=k+1;
end
if k>kend
'迭代不收敛,失败'
else
'求解成功'
x
k
end
ans =
求解成功
x =
k =
16
2、高斯塞德尔迭代法的源程序只要在上面的雅克比迭代法的程序中作一处更改便可,即将上面的第21行的程序s=s+A(m,l)*x0(l);改为s=s+A(m,l)*x(l);其结果如下:
x =
k =
9
四、实验分析
由实验可见对此题高斯赛德尔迭代法比雅可比迭代法的收敛速度快。因为由
高斯赛德尔迭代法和雅克比迭代法的原理可知,雅克比迭代法只是利用了前次迭代的结果,而高斯赛德尔迭代法也利用了当前迭代过程中已经算出来的新的分量,即当新的分量求出后,马上用它来代替旧的分量,则可能会更快地接近方程组的准确解。因此一般情况下高斯赛德尔迭代法比雅可比迭代法的收敛速度快。
实验二
一、实验内容
判别方程的实根存在区间,要求区间长度不大于1,然后用二分法求出最小正根的近似值,精度。
二、实验原理
对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b)<0,且f(x)在[a,b]内仅有一个实根x*,取区间中点c,若f(c)<e,则c恰为其根,否则根据f(a)f(c)<0是否成立判断根在区间[a,c]和[c,b]中的哪一个,从而得出新区间,仍称为[a,b]。重复运行计算,直至满足精度为止。这就是二分法的计算思想。
三、实验程序
先用画图的方法来粗略估计其根的范围,程序如下:
>> ezplot('x^3-3*x+1');
axis([-2 2 -10 10]);
grid
由上图可知其根分布区间大概分布在(-2,-1),(0,1)和(1,2)中。编写二分法求解最小正根的近似值程序如下:
>> format long;
f=inline('x^3-3*x+1');
a=0;
b=1;
Eps=1E-5;
for k=1:50
A(k)=a