高斯若尔当方便解N元方程:
#include#include #include float a[3][4]={ { 2,1,-1,8},{-3,-1,2,-11},{-2,1,2,-3}}; int rows=3,cols=4; void print_matrix() { //打印矩阵 int i,j; int m=rows,n=cols; for(i=0;i fabs(a[i][j]) ){ swap_row(k,i); //按绝对值大小排序 printf("行%d与行%d交换位置\n",k,i); print_matrix(); } //消除非1的主元; zhuyuan=a[i][j]; if(zhuyuan!=1){ xiao_zhuyuan(i,j,zhuyuan); print_matrix(); }//if if(a[k][j]!=0){ int temp=0; int u,v; for(v=i;v
不过目前只做到 矩阵梯队的形式。
继续。。。。。
——————————————————————————————————————————————————————————————————
上个例子中存在一些问题:
1.在交换行的时候,没有全行比较,只比较了相邻2行。
2.在显示第几行的时候,用的是数组的下标,故少了1.
3.没有对浮点数的显示优化,现在用的是"%.3g",这样能减少小数部分的长度.
4.没有用到 jordan的方法直接求解。
下面是完整例子,不过也不是最佳的,因为里面的变量看起来有点乱。
#include#include #include float a[3][4]={ { 2,1,-1,8},{-3,-1,2,-11},{-2,1,2,-3}}; //float a[4][5]={ {2,1,-1,8,1},{-3,-1,2,-11,1},{-2,1,2,-3,1},{5,7,8,0,1}}; int rows=3,cols=4; void print_matrix() { //打印矩阵 int i,j; int m=rows,n=cols; for(i=0;i maxval ){ maxval=fabs(a[d][j]); maxi=d; } } if(maxi!=i){ swap_row(maxi,i); //按绝对值大小排序 printf("行%2d与行%2d交换位置\n",maxi+1,i+1); print_matrix(); } //消除非1的主元; zhuyuan=a[i][j]; if(zhuyuan!=1){ xiao_zhuyuan(i,j,zhuyuan); print_matrix(); }//if if(a[k][j]!=0){ int temp=0; int u,v; for(v=i;v =0;i--){ for(k=0;k
在测试这个程序的时候发现:如果是方阵话,若尔当消元后,变成类似一下的矩阵:
1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 00 0 1 0 0 0 0 00 0 0 1 0 0 0 00 0 0 0 1 0 0 00 0 0 0 0 1 0 00 0 0 0 0 0 1 00 0 0 0 0 0 0 1附:
高斯消元法百科:高斯若尔当消元法百科:
在线高斯-若尔当消元计算(英文):