int i,c=1,k=0;
double X0[N]={0.0},X1[N]={0.0},X2[N],X3[N];
Jacobi(X0,X1,X2);
k++;
while(norm2(X2)>=esp)
{
Jacobi(X0,X1,X3);
/*收敛性判断*/
if(norm2(X3)>norm2(X2))
{c=0;break;}
else
{
for(i=0;i
三、题目
迭代公式求解方程组
例 3.8 试利用Gauss Seidel
1
1
1
1
5
1
1 10
4
10
)kX 满足
1
5
1 10
1
1
1
1
要求数值解 (
X X
k
(
)
2
x
1
x
2
x
3
x
4
,其中
4
12
8
34
X
(1,2,3,4)
T
为方程
组的精确解。
原理:
22
n
n
nn
D
A
,
a
11
a
21
a
将线性方程组的系数矩阵
分解为
a
a
1
12
a
a
22
2
a
a
2
1
n
n
,
)nn
,
a
0
a
12
0
0
0
0
0
0
A L D U ,其中
=
,
diag a a
0
0
0
0
0
a
32
a
a
,
1
n n
当对角阵 D 可逆时,方程组
LX UX b ,
DX
由此可构造迭代格式, (
LX
UX
DX
据此可得Gauss Seidel
迭代公式为
1
a
a
13
1
a
a
23
2
0
a
1,
n
0
0
AX b 可等价地写成
1)
k
0
a
21
a
31
a
11
k
0,1,
,
D L UX
(
0
0
0
0
1
D L b
) ,
1)
L
=
(
U
=
b
(
k
1
)
X
1
n
n
2
(
k
(
k
1
)
,
( )
k
n
n
n
该公式也可以写成如下的分量形式
7
(
k
1
)
x
i
1
a
ii
(
b
i
程序:
i
1
j
1
k
)1
a x
ij
(
j
n
j
1
i
a x
ij
( )
k
j
),
i
,
1,2
,
n
#include
#include
/*输入矩阵 A、b、精确解 X、精度 esp*/
#define N 4
double
A[N][N]={{5,-1,-1,-1},{-1,10,-1,-1},{-1,-1,5,-1},{-1,-1,-1,10}},b[N]=
{-4,12,8,34},X[N]={1,2,3,4},esp=1.0e-4;
/*求 2 范数*/
double norm2(double x[N])
{
int i;
double norm2,sum=0.0;
for(i=0;i