迭代法实验报告

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

迭代法实验报告 一. 实验目的:掌握迭代方法的用处 二. 实验环境:Cfree5.0 三. 实验时间:2013年6月20日 四. 实验地点:电子信息楼1201教室 五. 实验内容:运用编程实现迭代方法可以更好的解线性方程组,得到线性方程的解。 六. 实验理论依据:

高斯-赛德尔(Gauss-Seidel )迭代公式

我们注意到在雅可比迭代法中并没有对新算出的分量11k x +,12k x +,,

11k i x +-进行充分利用.不妨设想,在迭代收敛的条件下,我们把

(1)()()()11211331111(1)()()()22112332222(1)()()()1122,111()1(1(k k k k n n k k k k n n k k k k n n n n n n nn x a x a x a x b a x a x a x a x b a x a x a x a x b a +++--⎧=---+⎪⎪⎪=---+⎪⎨⎪⎪⎪=---+⎪

式中第一个方程算出的11k x +立即投入到第二个方程中,代替()1k x 进行计算,当12

k x +算出后代替()2k x 马上投入到第三个方程中计算,依次进行下去,这样也许会得到

更好的收敛效果.根据这种思路建立的一种新的迭代格式,我们称为高斯-赛德尔(Gauss-Seidel )迭代公式,

高斯=赛德尔迭代法的分量形式:

(1)()()()11211331111(1)(1)()()22112332222(1)(1)(1)(1)1122,111()1(1(k k k k n n k k k k n n k k k k n n n n n n nn x a x a x a x b a x a x a x a x b a x a x a x a x b a +++++++--⎧=---+⎪⎪⎪=---+⎪⎨⎪⎪⎪=---+⎪

高斯-赛德尔迭代法的矩阵形式:

(1)(),(0,1,2,)k k x Bx f k +=+=

其中

1()B D L U -=-,1()f D L b -=- B 称为高斯-赛德尔迭代矩阵,f 称为高斯-赛德尔迭代常量..

七. 运行代码如下:

#include"stdio.h"

#include"math.h"

int main()

{

bool pan1=true;

int n,n1,n2=0,k=0;

double

num[100][100],L[100][100],U[100][100],x[100],y[100],num1=0,b[100],D[100][100],x1[200][200],x2[200][200];

printf("\n");

printf("*******************************高斯迭代法解如下********************************");

printf("输入要输入矩阵的阶数为(按Enter 输入矩阵数字):");//

输入矩阵的阶数

scanf("%d",&n1);

for(int i=0;i

{

printf("输入第%d行数字为(按Enter进入下一行的输入):",i+1);

for(int j=0;j

{

scanf("%lf",&num[i][j]);

}

}//输入矩阵的数结束

for(int i=0;i

{

for(int j=0;j

{

if(i==j)

{

D[i][j]=num[i][j];

L[i][j]=0;

U[i][j]=0;

}

if(i>j)

{

L[i][j]=-num[i][j];

}

if(i

{

U[i][j]=-num[i][j];

}

}

}//求解对角线上的矩阵数结束

printf("=================================输出D的矩阵为==================================");

for(int i=0;i

for(int j=0;j

{

printf("%10lf",D[i][j]);

}

printf("\n");

}

printf("\n");

printf("=================================输出L的矩阵为

==================================");

for(int i=0;i

{

for(int j=0;j

{

printf("%10lf",L[i][j]);

}

printf("\n");

}

printf("\n");

printf("=================================输出U的矩阵为

==================================");

for(int i=0;i

{

for(int j=0;j

{

printf("%10lf",U[i][j]);

}

printf("\n");

}

printf("输入矩阵右端常数为(以空格隔开,按回车进

相关文档
最新文档