课程设计——解线性方程Jacobi迭代法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

解线性方程Jacobi 迭代法
解线性方程有两种方法:直接法和间接法.迭代法属于后者.考虑方程组 Ax=b ,
其中()n n ij A a R ⨯=∈,为非奇异矩阵.下面讨论如何建立Jacobi 迭代法. 将A 分裂为 A=M-N ,
其中,M 为可选择的非奇异矩阵,且使Mx=b 容易求解,一般选择为A 的某种近似,称为M 的分裂矩阵.
于是,求解Ax=b 转化为求解Mx=Nx+b,即求解
1
1
.Ax b x M
Nx M
b --=⇔=+
设0(1,2,,),ii a i n ≠= 并将A 写为三部分
121,1111
212,1
222
1,11,21,12
,1
00
00
00
00n n n n
n n n n nn n n n n a a a a a a a a A a a a a a
a a ---------⎡⎤⎡⎤
⎡⎤⎢
⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢
⎥⎢⎥⎢⎥=--⎢⎥⎢
⎥⎢⎥
---⎢⎥⎢⎥⎢
⎥⎣

⎢⎥⎢⎥---⎣



=D-L-U. 于是
().Ax b D L U x b =⇔--=

1
1
().x D
L U x D b --=++
所以解Ax=b 的基本迭代公式为
(0)(0)(0)
1(1)()1(,,),()/(1,2,,)(0,1,).n n
k k i i
ij j ii j j i x x x x b a x a i n k +=≠⎧=⎪⎪⎨=-==⎪⎪⎩
∑ 由上式可知,Jacobi 迭代法计算公式简单,每迭代一次只需计算一次矩阵和向量的乘法且计算过程原始矩阵A 始终不变.
定理 (迭代法基本定理) 设有方程组 x=Bx+f,
及一阶定常迭代法
(1)
()
.k k x
Bx
f +=+
对任意选取初始向量x,迭代法收敛的充要条件是矩阵B 的谱半径() 1.B ρ< 证明:
#include<stdio.h> #include<math.h> #define N 3
double fanshu(double a[N],double b[N]) {
int i;
double c=0;
for(i=0;i<N;i++)
c+=fabs(a[i]-b[i]); return c; }
void f(double x1[N],double a[N][N],double b[N]) {
int i,j,k=0;//k是迭代的次数
double sum,x2[N];//x2[N]记录下一次的x1[N] for(i=0;i<N;i++)
x2[i]=x1[i];
while(1)
{
k++;
for(i=0;i<N;i++)
{
sum=0;
for(j=0;j<N;j++)
if(j!=i)
sum+=a[i][j]*x2[j];
x1[i]=(b[i]-sum)/a[i][i];
}
printf("k=%d ",k);
for(i=0;i<N;i++)
printf("%lf ",x2[i]);
for(i=0;i<N;i++)
printf("%lf ",x1[i]);
printf("\n");
if(fanshu(x1,x2)<=1e-5)break;
for(i=0;i<N;i++)
x2[i]=x1[i];
}
}
main()
{
int i,j;
double x1[N]={0},a[N][N],b[N];
for(i=0;i<N;i++)
scanf("%lf",&b[i]);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%lf",&a[i][j]);
f(x1,a,b);
printf("最后的结果是x1=");
for(i=0;i<N;i++)
printf("%lf ",x1[i]);
}。

相关文档
最新文档