精确解:X=(1 1 1 1? 1)T1×64; X(0) (0 0 0 0? 1)T1×64; 精度为:0.0001. 执行C语言程序interrator-method. C得到result.txt文件。 得到三种迭代法的对比表1.
表1 三种方法的迭代性能
Method Jacobi Gauss-Seidel SOR withw=1.0 SOR withw=wopt SOR withw=1.5
IT CPU Time/ms 18 3.00000 10 2.00000 10 2.00000
‖x(k)-x∞‖∞ Info
8.19628×10-5 几乎比 Jacobi收1.68O24×10-5 敛速度快一倍 1.68024×10-5 退化成 Gauss
_ Seidel迭代
6 1.00000
5.47552×10-6 使 SOR迭 代
达到最快
17 3.00000
2.09836×10-5
w的取值于SOR
迭代的收敛速度 影响很大
4 优点
克拉默法则、逆阵乘积法只能求解系数行列式不为零的适定方程组 ;初等变换法可以直观地解决所有类型的超定、欠定、适定方程组,是一种普适的方法;利用向量空间概念求解线性方程组,更能从本质上把握线性方程组的解的性质。应用MATL B语言编程可以轻松实
现这些求解方法。
实用共轭梯度法主要有以下优点 :
1)算法中,系数矩阵A的作用仅仅是用来由已知向量P产生向量 w=Ap,这就充分利用了A的稀疏性。而且,对某些提供矩阵A较为困难而由已知向量p产生向量w=Ap又十分方便的应用问题是很有益的 。
2)不需要预先估计任何参数就可以计算,这与SOR方法等不同。 3)每次迭代所需的计算,主要是向量之间的计算,便于并行运算 5 附录
MATLAB语言是一种以矩阵运算为基础的计算语言。对于实现线方程组的求解非常方便。对一个四元一次方程组的求解.可以用克拉默法则和逆阵乘积法来实现,程序如下 : tic;
D=[1 1 1 1;1 2 -1 4;2 -3 -1 -5;3 1 2 11] det(D) b=[5-2-2 0];
Dl=[5 1 l l;-2 2 -1 4;-2 -3 -1 -5;0 1 2 11]; D2=[1 5 1 l; 1 -2 -1 4;2 -2 -1 -5;3 0 2 11]; D3=[1 1 5 1;1 2-2 4;2 -3 -2 -5;3 1 0 11]; D4=[1 1 1 5;1 2 -1 -2;2 -3 -1 -2;3 l 2 0]; X1= det (D1)/det(D); X2= det (D2)/det(D); X3= det (D3)/det(D); X4= det (D4)/det(D); X=inv(D)*b; Toc
其中克拉默法则用行列式除法( Xi=det(Di)/det(D))来实现;逆阵乘积法用(X=inv(D)*b)来实现;det(D)是系数矩阵D的行列式运算;inv(D)是D的逆阵运算。
上例中.系数矩阵D不为零,可以用克拉默法则和逆阵乘积法来求解。当系数行列式为零时,只能用初等变换来求解。对于初等变换.利用阶梯生成函数命rreff也可以轻松地实现,举例如下 :
tic;
A=[3-4 3 2 -1;0 -6 0 -3 -3;4 -3 4 2 -2;1 1 1 0 -1;-2 6 -2 1 3]; b=[2 -3 2 0 1];
B=[A,b],[UB,ip]=rref(B) U0=UB([1:5],[1:5]),d=UB(:,6) toc
UB为经过初等变换以后的行阶梯矩阵.可以轻松地求出方程组的解.
tic、toc为计时函数,CPU-pentium1.7GHz、512MB内存、MATLAB6.5的运算环境中,两个程序的运行时间分别为0.031s和0.015s。可见,MATLAB语言实现线性方程组的求解具有程序简单、直观的特 点。同时还具有计算效率高的优点。在实际计算中摆脱了系数矩阵阶数、未知元数等的限制 。
参考文献
[1]同济大学应用数学系.数学——线 性代数[M].4版.北京 :高等教育出版社.2003. [2]陈怀琛,龚杰民.线性代数实践及MATLABA人民[M].北京:电子工业出版社.2005.