高斯消元法求解线性方程组的解集

问题描述:

    运用高斯消元法求解线性方程组的解集,其中线性方程组的表示方式为:

例如:2x+4y=5

         2x+y=2

存储在二维数组中形式为

a[2][3]={{2,4,5,},{2,1,2}}

具体代码实现如下:

 1 #include<malloc.h>
 2 #include<stdio.h>
 3 #include<iostream.h>
 4 void Gauss(double **A,int n)
 5 {
 6  int i,j,k;
 7  for(k=0;k<n-1;++k)
 8  for(i=k+1;i<n;++i)
 9  for(j=k+1;j<=n;++j)
10  A[i][j]-=A[k][j]*A[i][k]/A[k][k];
11  for(i=n-1;i>=0;--i)
12  {
13   for(j=i+1;j<n;++j)
14      A[i][n]-=A[i][j]*A[j][n];
15      A[i][n]/=A[i][i];//此处A[i][j]改为A[i][i]
16  }
17 }
18 void main()
19 {
20     int i,j,count;
21     printf("请输入维数:");
22     scanf("%d",&count);
23 
24     //c中建立二维动态数组的方法
25     double **A=(double**)malloc(sizeof(double*)*count);
26     for (i=0;i<count;i++)
27         A[i]=(double*)malloc(sizeof(double)*(count+1));
28 
29     //输入线性方程组的参数值,
30     for(i=0;i<count;i++)
31     {
32         printf("请输入第%d行的值:",i+1);
33         for(j=0; j<count+1; j++)
34              scanf("%lf",&A[i][j]);
35     }
36 
37     //调用高斯消元公式求解
38     Gauss(A,count);
39 
40     //打印最终结果(结果保留在每一行的最后一个值中)
41     for(i=0;i<count;i++)
42          printf("%lf\n",A[i][count]);
43     
44     //最后释放空间
45     for(i=0;i<count;i++)
46         free(A[i]);
47     free(A);
48 
49 }

代码中采用了动态数组,其实定义全局数组也可以很好的实现。。。。

posted @ 2012-04-18 11:19  lpshou  阅读(1414)  评论(0编辑  收藏  举报