首先,为了能够求解N阶线性方程组(N由用户输入),所以需要定义一个大于N维的数组a[dim+1][dim+1](dim为设定的最大维数,防止计算量溢出),当用户输入的阶数N超过设定值时提示重启程序重新输入。
进而,要判断方程组是否有解,无解提示重启程序重新输入,有解的话要判断是有无数不定解还是只有唯一一组解,在计算中,只有当原方程组有且只有一组解时算法才有意义,而运
用高等代数的知识,只有当系数矩阵对应的行列式 |A|≠0 时,原方程组才有唯一解,所以输入系数矩阵后要计算该系数矩阵的行列式 |A|(定义了getresult(n)函数计算),当行列式 |A|=0 时同样应提示重启程序重新输入, |A|≠0 时原方程组必然有且仅有唯一一组解。
判断出方程组有且仅有唯一一组解后,开始将系数矩阵和常数矩阵(合并即为增广矩阵)进行初等行变换(以 a11 为基元开始,将第j列上j行以下的所有元素化为0),使系数矩阵转化为上三角矩阵。这里要考虑到一种特殊情况,即交换到第j-1列后,第j行第j列元素 ajj=0 ,那此时不能再以 ajj 为基元。
当变换到第j列时,从j行j列的元素 ajj 以下的各元素中选取第一个不为0的元素,通过第三类初等行变换即交换两行将其交换到 ajj 的位置上,然后再进行消元过程。交换系数矩阵中的两行,相当于两个方程的位置交换了。
再由高斯消元法,将第j列元素除 ajj 外第j行以下的其他元素通过第二种初等行变换化为0,这样,就能使系数矩阵通过这样的行变换化为一个上三角矩阵,即
,
当系数矩阵A进行初等行变换时,常数矩阵也要进行对应的初等行变换,即此
时
那么有