数值分析上机实验报告 下载本文

内容发布更新时间 : 2024/12/23 7:22:39星期一 下面是文章的全部内容请认真阅读。

哈工大A16公寓1214室 院士之家团队之作品

(Ps:请各位师兄弟姐妹们抄的时候注意改动一下,尽量不要太雷同)

实验报告二

题目: Gauss列主元消去法

摘要:求解线性方程组的方法很多,主要分为直接法和间接法。本实验运用直接法的Guass消去法,并采用选主元的方法对方程组进行求解。

前言:(目的和意义)

1. 学习Gauss消去法的原理。 2. 了解列主元的意义。

3. 确定什么时候系数阵要选主元 数学原理:

(k?1)由于一般线性方程在使用Gauss消去法求解时,从求解的过程中可以看到,若akk=0,(k?1)则必须进行行交换,才能使消去过程进行下去。有的时候即使akk?0,但是其绝对值非

常小,由于机器舍入误差的影响,消去过程也会出现不稳定得现象,导致结果不正确。因此有必要进行列主元技术,以最大可能的消除这种现象。这一技术要寻找行r,使得

(k?1)(k?1)|ark|?maxaik

i?k(k?1)并将第r行和第k行的元素进行交换,以使得当前的akk的数值比0要大的多。这种列主

元的消去法的主要步骤如下: 1. 消元过程

对k=1,2,…,n-1,进行如下步骤。 1) 选主元,记

|ark|?maxaik

i?k若|ark|很小,这说明方程的系数矩阵严重病态,给出警告,提示结果可能不对。 2) 交换增广阵A的r,k两行的元素。

arj?akj (j=k,…,n+1) 3) 计算消元

aij?aij?aikakj/akk (i=k+1,…,n; j=k+1,……,n+1)

2. 回代过程

对k= n, n-1,…,1,进行如下计算

.6.

哈工大A16公寓1214室 院士之家团队之作品

(Ps:请各位师兄弟姐妹们抄的时候注意改动一下,尽量不要太雷同)

xk?(ak,n?1?至此,完成了整个方程组的求解。

程序设计:

本实验采用Matlab的M文件编写。 Gauss消去法源程序:

clear

a=input('输入系数阵:>>\\n') b=input('输入列阵b:>>\\n') n=length(b); A=[a b] x=zeros(n,1); %%%函数主体 for k=1:n-1;

%%%是否进行主元选取

j?k?1?ankjxj/akk)

if abs(A(k,k))

yzhuyuan=1;

else yzhuyuan=0;

end

if yzhuyuan; %%%%选主元 t=A(k,k); for r=k+1:n;

if abs(A(r,k))>abs(t) p=r; else p=k; end end %%%交换元素 if p~=k;

for q=k:n+1; s=A(k,q); A(k,q)=A(p,q); A(p,q)=s;

.7.

哈工大A16公寓1214室 院士之家团队之作品

(Ps:请各位师兄弟姐妹们抄的时候注意改动一下,尽量不要太雷同)

end end end

%%%判断系数矩阵是否奇异或病态非常严重 if abs(A(k,k))< yipusilong

disp(‘矩阵奇异,解可能不正确’) end

%%%%计算消元,得三角阵 for r=k+1:n; m=A(r,k)/A(k,k); for q=k:n+1;

A(r,q)=A(r,q)-A(k,q)*m; end end end

%%%%求解x x(n)=A(n,n+1)/A(n,n); for k=n-1:-1:1; s=0;

for r=k+1:n; s=s+A(k,r)*x(r); end

t=(A(k,n+1)-s) x(k)=(A(k,n+1)-s)/A(k,k) end

结果分析和讨论:

??26??x??22???y???34?。其中为一小数,当?5?10?14?20575例:求解方程?时,??10,10,10,10?????????321????z????10??分别采用列主元和不列主元的Gauss消去法求解,并比较结果。 记Emax为求出的解代入方程后的最大误差,按要求,计算结果如下:

当??10?5时,不选主元和选主元的计算结果如下,其中前一列为不选主元结果,后一列为选主元结果,下同。

0.99999934768391 0.99999934782651

.8.

哈工大A16公寓1214室 院士之家团队之作品

(Ps:请各位师兄弟姐妹们抄的时候注意改动一下,尽量不要太雷同)

2.00000217421972 2.00000217391163 2.99999760859451 2.99999760869721 Emax= 9.301857062382624e-010,0

此时,由于?不是很小,机器误差就不是很大,由Emax可以看出不选主元的计算结果精度还可以,因此此时可以考虑不选主元以减少计算量。

当??10?10时,不选主元和选主元的计算结果如下

1.00001784630877 0.99999999999348 1.99998009720807 2.00000000002174 3.00000663424731 2.99999999997609 Emax= 2.036758973744668e-005,0

此时由Emax可以看出不选主元的计算精度就不好了,误差开始增大。 当??10?14时,不选主元和选主元的计算结果如下

1.42108547152020 1.00000000000000 1.66666666666666 2.00000000000000 3.11111111111111 300000000000000 Emax= 0.70770085900503,0

此时由Emax可以看出,不选主元的结果应该可以说是不正确了,这是由机器误差引起的。

当??10?20时,不选主元和选主元的计算结果如下

NaN 1 NaN 2 NaN 3 Emax=NaN, 0

不选主元时,程序报错:Warning: Divide by zero.。这是因为机器计算的最小精度为10-15,所以此时的??10?20就认为是0,故出现了错误现象。而选主元时则没有这种现象,而且由Emax可以看出选主元时的结果应该是精确解。 结论:

采用Gauss消去法时,如果在消元时对角线上的元素始终较大(假如大于10-5),那么本方法不需要进行列主元计算,计算结果一般就可以达到要求,否则必须进行列主元这一步,以减少机器误差带来的影响,使方法得出的结果正确。

.9.

哈工大A16公寓1214室 院士之家团队之作品

(Ps:请各位师兄弟姐妹们抄的时候注意改动一下,尽量不要太雷同)

实验报告三

题目: Rung现象产生和克服

摘要:由于高次多项式插值不收敛,会产生Runge现象,本实验在给出具体的实例后,采用分段线性插值和三次样条插值的方法有效的克服了这一现象,而且还取的很好的插值效果。

前言:(目的和意义)

1. 深刻认识多项式插值的缺点。 2. 明确插值的不收敛性怎样克服。 3. 明确精度与节点和插值方法的关系。 数学原理:

在给定n+1个节点和相应的函数值以后构造n次的Lagrange插值多项式,实验结果表明(见后面的图)这种多项式并不是随着次数的升高对函数的逼近越来越好,这种现象就是Rung现象。

解决Rung现象的方法通常有分段线性插值、三次样条插值等方法。 分段线性插值:

设在区间[a, b]上,给定n+1个插值节点

a=x0

和相应的函数值y0,y1,…,yn,,求作一个插值函数?(x),具有如下性质:

1) ?(xj)?yj,j=0,1,…,n。

2) ?(x)在每个区间[xi, xj]上是线性连续函数。则插值函数?(x)称为区间[a, b]上对应n个数据点的分段线性插值函数。

三次样条插值: 给定区间[a, b]一个分划

⊿:a=x0

1) S(x)在每个区间[xi, xj]上是不高于3次的多项式。

2) S(x)及其2阶导数在[a, b]上连续。则称S(x)使关于分划⊿的三次样条函数。 程序设计:

本实验采用Matlab的M文件编写。其中待插值的方程写成function的方式,如下

.10.