高斯消元法求解线性方程组的解集
问题描述:
运用高斯消元法求解线性方程组的解集,其中线性方程组的表示方式为:
例如: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 }
代码中采用了动态数组,其实定义全局数组也可以很好的实现。。。。