logo资料库

解线性方程组的迭代法 数值计算方法实验 数值方法实验.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
云南大学数学与统计学实验教学中心实验报告 课程名称:数值计算方法 学期: 2009—2010 学年第二学期 成绩: 指导教师: 李耀堂 学生姓名:赵永刚 学生学号:20081910025 实验名称: 解线性方程组的迭代法 实验编号:No. 3 实验日期: 2010-5-19 学院: 数学与统计学院 专业: 信息与计算科学 实验学时: 3 年级: 2008 级 一.试验目的:练习线性方程组的迭代解法。 二. 实 验 内 容 : 分 别 用 雅 可 比 (Jacobi ) 迭 代 法 和 高 斯 — 塞 德 尔 (Gauss—Seidel)迭代法求解下列线性方程组,且比较收敛速度, 要求当 x k 1  k x 2  01.0 是迭代终止。 1) 2) 10 9 x x    2 1   10 2 x x   2 1  4 6 x x    3 2 1 4 0    4 1 1     0 1 4   0 0 1    1 0 0   0 1 0    x 3  7 1  0 0 4 1  0 0 1  0 1  4 1  0   0   1   0   1   4             三.实验环境:PC 计算机, C 语言。 x 1 x x x x x 5 4 2 3 6            0   5   0  6     6   .           2 四.实验方法: 雅可比(Jacobi)迭代法、高斯—塞德尔(Gauss—Seidel)迭 代法. 1)雅可比方法: 用 迭 代 法 解 线 性 方 程 组 Ax  b , 设 A   ija 非 奇 异 , 且 对 角 线 元 素 aii  (0 i  2,1 ), n , 把 A 分裂成三个矩阵之和 A=L+D+U,其中
L  0   a  21  a 31     a  1 n 0 0 a 32  a 2 n  a 1, nn         0  , D  a  11        a 22 a 33         , U  0          a nn a 12 0 a 13 a 23 0 a  1 n a  2 n a  3 n  0         则雅可比迭代法的分量形式为: k )1  ( x i  (1 b i a ii  j n  ,1  j xa ij i  )( k j ) ( i  ,2,1  ), n 雅可比迭代的矩阵形式为: ( k ) x  xB 0 ( k )  f 0 其中 B 0  2)高斯—塞德尔迭代法: 高斯—塞德尔迭代法的分量形式为: 1  ), fULD  (   1 bD 0 k )1  x ( i  (1 b i a ii  i 1   j 1   k xa ij n 1     xa ij 1 i  j )( k j ) ( i  ,2,1 ), n  . 高斯—塞德尔迭代法的矩阵形式为: x ( k )1  ( k ) xG 0  f 1 , 其中 G 0  ( 五.实验过程: , fULD  )  1  ( LD  )  1 b . 1 1.编程: 根据所用算法及选用语言编出源程序 2. 开机, 打开所用语言系统输入所编源程序. 3. 调试程序, 修改错误直至能正确运行. 4. 运行程序并输出计算结果. 计算结果:
六. 实验总结: 由于高斯—塞德尔方法与雅可比法迭代阵不同,雅可比方法收敛并不能保证 高斯—塞德尔方法收敛,反之也如此。但运算结果表明当二者均收敛时,高斯 —塞德尔方法比雅可比方法收敛速度快。另一方面,高斯—塞德尔方法算出一个 新的分量就把先一次的分量覆盖,只需一组工作单元,算法更加简单。 /*第二个实验中 3 改为 6*/ 七:程序源代码: #define N 3 #include #include void jacobi2(float m[N][N],float f[N], float eps, long imax) {int i;int j;int tail; long k; float err,sum,x[N],xk[N]; for(i=0;i
x[i]=(f[i]-sum)/m[i] [i]; err+=(x[i]-xk[i])*(x[i]-xk[i]); } for(i=0;i
main() {int i;int j; float a[N][N],b[N],trans; printf("Please input the coefficiency matrix.\n"); for(i=0;i
分享到:
收藏