哈工大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.