迭代法实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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("输入矩阵右端常数为(以空格隔开,按回车进