#define OEDER 8//order 秩
u8 SolvingLinearEquations(void)//u16 dat,u8 oeder
{
int i, j, m, n=OEDER, r=OEDER, t; //i,j,m,k,t 作为循环计数变量;n表示有n个未知数,即n元;r表示有r个方程组成方程组。
// scanf("%d %d", &n, &r); //n表示有n个未知数,即n元;r表示有r个方程组成方程组。
float a[8][9] = {
{1237, 1993, 3389, 9801, 14965, 21417, 36681, 54711, 3000},
{1173, 1623, 7046, 12228, 10086, 13478, 12518, 90697, 3000},
{4224, 88822, 43497, 0, 0, 0, 0, 0, 3000},
{1215, 2163, 10467, 13451, 17180, 29880, 54495, 14843, 3000},
{1774, 2329, 5839, 15747, 19187, 29389, 69734, 397, 3000},
{609, 3133, 7535, 11901, 17120, 23370, 66461, 11706, 3000},
{2171, 2711, 4001, 13346, 18621, 69228, 35721, 0, 3000},
{50536, 81169, 0, 0, 0, 0, 0, 0, 3000},
}; //用二维数组存储方程组参数。11和100课改动。这里的程序限 10 元 20 个方程的方程组。
printf("请输入方程组参数\r\n");
for(j=0; j<n; j++)
{
for(i=0; i<r+1; i++)
printf("%f\t", a[j][i]);
printf("\r\n");
}
if(r<n)
printf("方程有无穷解\r\n");
if(r==n)
{
printf("方程有唯一解\r\n");
for(t=0; t<n-1; t++) //循环次数:当t=0时,仅将a[1][0],a[2][0],a[2][1]的值转换为0;t=1时,才将其转换成最简型阶梯矩阵。
for(m=0; m<n; m++) //m表示第m列
for(j=0; j<n; j++) //j表示第j行
if(j!=m)
{
float b= a[j][m]/a[m][m];
for(i=0; i<n+1; i++) //因为一行的每个元素均要进行运算等式两边才会相等。
a[j][i] -= a[m][i]*b;
}
for(j=0; j<n; j++) //为了将其转换成单位矩阵,见《线性代数》
{
a[j][n] /=a[j][j];
a[j][j] /=a[j][j];
}
}
for(j=0; j<r; j++)
{
printf("a[%d][%d]:%f\r\n", j,n,a[j][n]); //输出最终结果,即未知数x,y,z...的值。
}
for(j=0; j<n; j++)
{
for(i=0; i<r+1; i++)
printf("%f\t", a[j][i]);
printf("\r\n");
}
return 0;
}