一、引言
在自然科学和工程技术中很多问题的解决常常归结为解线性代数方程组,从而获得问题的解决方案,在解方程组的过程中从大的方面来讲有直接法和迭代法。而以下我们的程序通过高斯消去法和三角分解法解线性方程组中,主要是运用了迭代法。
二、算法描述(Linear equation)
1、Guass elimination
(1)n,m分别表示线性方程组的个数和所要求解未知量的个数,函数中设置变量root_number,监视方程组解的个数,具体对应关系如下表所示(斜杠表示不存在的情况)
root_number |
n>m |
n=m |
n<m |
0 |
线性方程组无解 |
||
1 |
方程组个数大于未知数个数,但有些项可以消去,有唯一一组解 |
方程组个数等于未知数个数,有唯一一组解 |
|
IF(表示无穷大) |
方程组个数大于未知数个数,但有些项可以消去,有无穷多组解 |
方程组个数等于未知数个数,但有些项可以消去,有无穷多组解 |
方程组个数小于未知数个数,有无穷多组解 |
这里具体以n=m讨论且没有可以消去的项,
具体如下矩阵,设有n元矩阵m个未知量
a11 · · · a1m x1 b1
· · · · ·
· · · · = ·
· · · · ·
an1 · · · anm xn bn
已知矩阵中m+1列存放方程结果b1,b2,…bn
第一步:选取第一列中ai1绝对值最大的作为主元,即主元所在行与第一行交换,
然后 令
li1= ai1/a11,i= 2,3,……,m+1
用(-li1)乘第一个方程加到第i个方程上,得同解方程组:
a11(1) a11(1) · a1m(1) x1 b1(1)
0 a22(2) · a2m(2) x2 b2(2)
· · · · · = ·
0 an-12(1) · an-1m(1) xn-1 bn-1(2)
0 an2(1) · anm (1) xn bn(2)
简记为A(2)*X=b(2),其中
aij(2) = aij(1) – li1 * a1j(1) , i=2,3….n, j = 2,3,..,m+1
第二步:如果a22(2) != 0,令 li2= ai2(2)/a22(2), I= 3,……,n 依据同样的原理,对矩阵进行化间(省略),依次下去,直到完成!
最后得到矩阵方程
1 a12(1) · · a1m(1) x1 b1(1)
0 1 · · a2m(2) x2 b2(2)
0 0 · · · · = ·
1 an-1m (n-1) xn-1 bn-1(n-1)
0 0 0 · 1 xn bn(n)
简记为 A(n)*x=b(n)
线性方程组的结果(即b值)存储在数组最后一列,
则求解过程如下:
Xn=an,n+1
Xn-1=a n-1,n+1-an-1,n*xn
Xn-2=an-2,n+1-an-2,n-1*xn-1-an-2,n*xn
。
。
。
X1=a1,n+1-a1,2*x2-a1,3*x3-…-a1,n*xn
若
2、LU factorisation
输入线性方程组的个数n和未知量m的个数,若n不等于m。则不满足分解条件,无法分解。下面只讨论n等于