数值分析与实验
作者:佚名; 更新时间:2014-12-05

  论文关键词: 列主元高斯消去法  雅可比法  高斯-赛德尔迭代法  幂法

  论文摘要:本文通过实例对线性方程组数值解法和矩阵的特征值及特向量的计算进行了探讨。在对线性方程组数值解法的讨论下用到了列主元高斯消去法、雅可比法和高斯-赛德尔迭代法。正是高斯消去法在消元时存在一些必须的条件,才启发我们通过列主元高斯消去法来对线性方程组数值解法作进一步的研究,达到了很好的的效果。同时用雅可比法和高斯-赛德尔迭代法对相类似的问题的探讨来比较它们的优劣,使我们在分析问题时能更好的把握方法。在求矩阵按模最大的特征值及对应特征向量时,本文用到了幂法,可以使现实中很多复杂的计算简单。

  第一章:线性方程组数值解法

  实验目的

  熟悉求解线性方程组的有关理论和方法 ;会编制列主元消去法,雅可比及高斯-赛德尔迭代法的程序 ;通过实际计算,进一步了解各种方法的优缺点,选择合适的数值方法。

  实验内容

  列主元高斯消去法求解线形方程组;

  雅可比法和高斯-赛德尔迭代法解方程组;

  1.1  题目:列主元高斯消去法求解线形方程组

  方程组为:

  1.1.1  列主元高斯消去法算法

  将方程用增广矩阵 表示

  1)            消元过程

  对k=1,2,….,n-1

  1 选主元,找

  2 如果 则矩阵A奇异,程序结束;否则执行3

  3 如果 j=k,…,n+1

  4 消元,对i=k+1,…,n计算

  2)  回代过程

  1 若 则矩阵A奇异,程序结束;否则执行2

  2

  1.1.2   程 序

#include <stdio.h>

#include <math.h>

void ColPivot(float *c,int n,float x[])

 { int i,j,t,k;

  float p;

  for(i=0;i<=n-2;i++)

{k=i;

for(j=i+1;j<=n-1;j++)

if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))k=j;

  if(k!=i)

  for(j=i;j<=n;j++)

   {

    p=*(c+i*(n+1)+j);

    *(c+i*(n+1)+j)=*(c+k*(n+1)+j);

    *(c+k*(n+1)+j)=p;

   }

for(j=i+1;j<=n-1;j++)

{

  p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));

for(t=i;t<=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));

}

}

  for(i=n-1;i>=0;i--)

  {

  for(j=n-1;j>=i+1;j--)

    (*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));

  x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));

  }

}

void main()

{

 void ColPivot(float*,int,float[]);

 int i;

 float x[4];

 float c[4][5]={1,-1,2,-1,-8,2,-2,3,-3,-20,1,1,1,0,-2,1,-1,4,3,4,};

ColPivot(c[0],4,x);

for(i=0;i<=3;i++)printf("x[%d]=%f\n",i,x[i]);

}

  1.1.3  输出结果

  

数值分析与实验

  1.1.4结果分析

  从输出结果可以得到 =-6.999999, =3.000000,

   =2.000000, =2.000000

  从结果和过程可以知道这种方法一般能保证舍入误差不扩散,这个方法基本上是稳定的。

核心期刊快速发表
Copyright@2000-2030 论文期刊网 Corporation All Rights Reserved.
《中华人民共和国信息产业部》备案号:ICP备07016076号;《公安部》备案号:33010402003207
本网站专业、正规提供职称论文发表和写作指导服务,并收录了海量免费论文和数百个经国家新闻出版总署审批过的具有国内统一CN刊号与国际标准ISSN刊号的合作期刊,供诸位正确选择和阅读参考,免费论文版权归原作者所有,谨防侵权。联系邮箱:256081@163.com