实验一:Guass列选主元消去法之C语言代码

虽然数值老师让我们用图形化进行编程,但由于自己对于GUI编程了解的比较少,这里暂时还是在dos窗口实现吧.实验题目:
1,Guass列选主元消去法

|2.5 2.3 -5.1|  | x1 |    |3.7|
|5.3 9.6 1.5 |  | x2 |  = |3.8|
|8.1 1.7 -4.3|  | x3 |    |5.5| 

    对于AX=b;根据课本39面的算法描述:
    首先:输入方程组的维数n,矩阵A,右端项b,控制精度这里我们先不管:...
    后面bb的啥选主元,交换两行,消元,没啥好说明的,下面直接上代码:
    

/*************************************************************************
    > File Name: guass.c
    > Author:chendiyang
    > School:WUST_CST_1501班
    > Myblog:www.chendsir.com
    > Mail:[email protected] 
    > Created Time: 2017年04月17日 星期一 11时01分51秒
 ************************************************************************/

#include 
#include 
#define MAX 20   //最大维数 

int main()
{
    int n;
    int i,j,k;
    int mi;
    double mx,tmp;
    static double a[MAX][MAX],b[MAX],x[MAX];
    printf("\n 输入方程组的维数:");//输入AX=b的维数
    scanf("%d",&n);
    if(n>MAX)
    {
        return 1;
     } 
     if(n<=0)
     {
        return 1;
     }
     //输入矩阵的值
     printf("\n请输入A矩阵的值:"); 
     for(i=0;ifor(j=0;jscanf("%lf",&a[i][j]);
           //输入b矩阵 
      printf("\n请输入B矩阵的值:");      
      for(i=0;iscanf("%lf",&b[i]);
      for(i=0;i1;i++)
      {
        //找主元素 
        for(j=i+1,mi=i,mx=fabs(a[i][i]);jif(fabs(a[j][i])>mx)
        {
            mi=j;
            mx=fabs(a[j][i]);
          }

        //交换两行  
        if(ifor(j=i;j//高斯消元 
          for(j=i+1;jfor(k=i;k//求解方程 
          x[n-1]=b[n-1]/a[n-1][n-1];
          for(i=n-2;i>=0;i--)
          {
              x[i]=b[i];
            for(j=i+1;j//输出运行结果 
          printf("solution is :\n");
          for(i=0;iprintf("%lf\n",x[i]);
          return 0;    

}

    运行结果如图:
    实验一:Guass列选主元消去法之C语言代码_第1张图片            
    可以看到图中运行的guass.c源文件(./guass代表运行这个程序,这是Linux上的gcc编译和运行命令),同时又运行了sequence.c源文件(./sequence代表运行这个程序)两个结果都是相同的,代表之前的顺序消去法和列选主元消去法的输出的solution结果都是相同的,这表明两种方法产生的误差都一样....

你可能感兴趣的:(数值分析)