线性代数方程组的通用性迭代解法的程序实现
李安志
(成都市510信箱,成都610003
摘要给岀利用线性代数方程组的通用性迭代解法求线性代数方程组的一个特解 的算法描述及C语言实现.
关键词线性代数方程组;特解;收敛性
中图法分类号0214. 5 ; TP311
1概述
线性代数方程组的通用性迭代解法与传统的迭代解法相比1 :它的算法更简单,收敛速度
更快,判断方程是否有解更准确.其思想描述如下:
(1)用(? , ?)表示两向量的内积,用II ? ^2表示向量的欧氏范数.
定义1. 1将n X m阶线性代数方程组
(5 ' , x) = bi ,( x € Rm ,未知),
115 i I2 = 1 ,
i = 1 ,2,, n 19 st丄
其中X°为迭代初值,k为迭代次数,Xk为解的k次近似值. 该算法的正确性证明请参考文献2 .
2算法描述
2. 1变量说明 head :存放长度为nX ( m + 1)的连续空间的起始地址,该空间用于按行排列 存放方程组的增广矩阵.p ,p1 :分别存放两个长度为 n的连续空间的起始地址,该空间分别用
3中国工程物理研究院预研基金资助项目
收稿日期 1998 - 05 - 24 李安志 男32岁 讲师
于存放一次迭代前后的近似解.m , n :分别存放方程组中方程的个数和变量的个数.t:存放
迭代的精度.
2. 2调用的过程和函数in put ():输入方程组的增广矩阵存放到以head为起始地址的连续
空间中,并法式化该方程组.didai ():用迭代法求方程组的根.
2. 3算法
Procedure didai ()
begin
输入m ,n ,t的值;
动态分配连续空间head ,p ,p1 ;
input ();初始
化 p ,p1 ; s < -
1. 0 ;
while ( s > t) / 3 迭代过程 3 /
■? - ■■"
begi n
(I) for i = 1 to m
begin
.-jL En*N"F—
p 0. . n - 1 < - p1 0. . n + 1 ;
q = 0 . 0 ;
鶯*鶯料 %?
for k = 0 to n - 1
q = q + head (i - 1) 3 ( n + 1) + k 3 p k ;
for k = 0 to n - 1
p1 k = p k +(headi 3 (n +1)-1 - q ) 3 head (i- 1) 3 (n + 1) +
k ;
en d.
(n) s = (p1 0. . n - 1 - p 0. . n - 1) X(p1 0. . n - 1 - p 0. . n - 1);
(川)s = sqrt ( s);
end
for i = 1 to m / 3判断p1是否为方程的根3 /
begin
p 0. . n - 1 < - p1 0. . n - 1 ;
q = 0 . 0 ;
for k = 0 to n - 1
q = q + head (i - 1) 3 ( n + 1) + k 3 p k ;
for ( k = 0 ; k < = n - 1 ; k + + )
p1 k = p k +( headi 3 ( n + 1)-1 - q ) 3 head (i - 1) 3 ( n + 1) + k ;
s = (p1 0. . n - 1 - p 0. . n - 1 X (p1 0. . n - 1 - p 0. . n - 1);
s = sqrt ( s);
if (s > t) break ;
1^94-201』
end
(8) if (i >
m)输出方程的解
p ;
else
方程无解
endp
3程序运行例子
有方程组为:
2 xi
+ X2 -
5 X3
+ X4 = 8 .
<
xi -
3 X2 -
6 X4
=9 ,
2 X2
-X3 +
2 X4
=-5 ,
(I
J Xi +
4 X2 -
7 X3
+ 6 X4 = 0.
?於*血l 5'-
&'.花一.\1! '-0 h
? L V. l>...■*
jj r*_K
粘|1
.—.H T .J.'-气匕
-=''H '” '■?
■」
-i i*H a,."l-~ i .
::污
:.詞'|\
■I
i'i'11.
li 《
■ ■
H□-■%
.以二 3
严泪工;
*■1
■:::,: HI
AA sA hi
\ ?v?, II
:n
Ji
?