解线性方程组的迭代法 联系客服

发布时间 : 星期三 文章解线性方程组的迭代法更新完毕开始阅读6add2f04ba1aa8114431d915

一、目的

1.通过本实验加深对Jacobi迭代法、Gauss-Seidel迭代法、松弛迭代法的构造过程的理解; 2.能对上述三种迭代法提出正确的算法描述编程实现,进一步理解迭代法的改进过程;

自选线性方程组,编制一个程序,分别用Jacobi迭代法、Gauss-Seidel迭代法求解,比较两种迭代法收敛速度的快慢。

二、内容与设计思想

三、使用环境

操操作系统:Windons XP 软件环境:VC 6.0 四、核心代码及调试过程

题目要求,求解下面的方程组,分别用Jacobi迭代法、Gauss-Seidel迭代法求解

?7.2x1?2.3x2?4.4x3?0.5x4?15.1?1.3x?6.3x?3.5x?2.8x?1.8?1234 ??5.6x1?0.9x2?8.1x3?1.3x4?16.6??1.5x1?0.4x2?3.7x3?5.9x4?36.9Jacobi迭代法: #include #include #include #define EPS 0.0001 #define N 10

#define max_D 100

double norm_inf(double x[],int n) { double norm; int i; norm = fabs(x[0]); for (i=1;inorm) norm = fabs(x[i]); return (norm); } }

void jacobi(double a[N][N],double g[N],int n) { double b[N][N] = {0},x0[N],x1[N],x1_x0[N],norm,temp; int i,j,k; for (i=0;i

第 1 页 共 5 页

{ g[i]=g[i]/a[i][i]; for (j=0;j= EPS) && (k

void main() {

第 2 页 共 5 页

double a[N][N]={{7.2,2.3,-4.4,0.5},{1.3,6.3,-3.5,2.8},{5.6,0.9,8.1,-1.3},{1.5,0.4,3.7,5.9}}; double g[N]={15.1,18,16.6,36.9}; jacobi(a,g,4); }

运行结果:

Gauss-Seidel迭代法: #include #include #include #define EPS 0.0001 #define N 10

#define max_D 100

double norm_inf(double x[],int n) { double norm; int i; norm = fabs(x[0]); for (i=1;inorm) norm = fabs(x[i]); return (norm); } }

void Gauss(double a[N][N],double g[N],int n) { double b[N][N] = {0},x0[N],x1[N],x1_x0[N],norm,temp; int i,j,k; for (i=0;i

第 3 页 共 5 页

g[i]=g[i]/a[i][i]; for (j=0;j= EPS) && (k

void main() { double a[N][N]={{7.2,2.3,-4.4,0.5},{1.3,6.3,-3.5,2.8},{5.6,0.9,8.1,-1.3},{1.5,0.4,3.7,5.9}};

第 4 页 共 5 页

double g[N]={15.1,18,16.6,36.9}; Gauss(a,g,4); }

运行结果、;

五、总结

1. 通过本实验加深对Jacobi迭代法、Gauss-Seidel迭代法、松弛迭代法的构造过程的理解。 2. 通过对上述三种迭代法提出正确的算法描述编程实现,进一步理解迭代法的改进过程。 3. 比较两种迭代可知:Gauss-Seidel迭代法求解比Jacobi迭代法收敛速度较快。

六、附录

第 5 页 共 5 页