用雅可比迭代法求线性方程组的解的并行算法(MPI)

 1  // =================================================================
  2  //  Name : 使用雅可比迭代法求解线性方程组
  3  //  Author : 袁冬(2107020046)
  4  //  Copyright : 中国海洋大学
  5  //  LastUpdate : 2007.10.18    
  6  //  Develop Evrionment : Windows Server 2003 SP2
  7  //                         + Eclipse 3.3.1 + CDT 4.0.1 
  8  //                         + MinGW 3.81 + GDB 6.6 
  9  //                         + mpich2-1.0.6-win32-ia32
 10  // =================================================================
 11 
 12  // #define DEBUG 1  // 调试符号
 13 
 14  #define TRUE 1
 15  #define FALSE 0
 16  #define bool int
 17 
 18  #define MAX_N 100  // 允许的最大未知数个数
 19  #define MAX_A (MAX_N * MAX_N)  // 允许最大的系数的个数
 20 
 21  #define MAX_ITERATION 10000  // 最大迭代次数
 22  #define TOLERANCE 0.001  // 误差
 23 
 24 #include "mpi.h"
 25 #include <stdio.h>
 26 #include <stdlib.h>
 27 
 28  int pID, pSize;  //
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用雅可比迭代法解线方程组的C语言代码: ```c #include <stdio.h> #include <math.h> #define N 3 // 线性方程组的阶数 int main() { int i, j, k, n = 0, flag; double eps, sum, x0[N], x1[N], a[N][N], b[N]; // 系数矩阵及常数向量 a[0][0] = 10; a[0][1] = -1; a[0][2] = 2; b[0] = 7; a[1][0] = -1; a[1][1] = 11; a[1][2] = -1; b[1] = 8; a[2][0] = 2; a[2][1] = -1; a[2][2] = 10; b[2] = 6; for (i = 0; i < N; i++) x0[i] = 0; eps = 1e-6; n = 0; flag = 1; printf("初值: x0 = ("); for (i = 0; i < N; i++) { printf(" %lf", x0[i]); } printf(" )\n"); while (flag) { flag = 0; n++; printf("第%d次迭代: x%d = (", n, n); for (i = 0; i < N; i++) { sum = 0; for (j = 0; j < N; j++) { if (j != i) { sum += a[i][j] * x0[j]; } } x1[i] = (b[i] - sum) / a[i][i]; printf(" %lf", x1[i]); if (fabs(x1[i] - x0[i]) > eps) { flag = 1; } } printf(" )\n"); for (k = 0; k < N; k++) { x0[k] = x1[k]; } } return 0; } ``` 上述代码实现了一个简单的线性方程组的过程,采用雅可比迭代法进行。输入的三个线性方程组为: $$ \begin{cases} 10x_0 - x_1 + 2x_2 = 7 \\ -x_0 + 11x_1 - x_2 = 8 \\ 2x_0 - x_1 + 10x_2 = 6 \end{cases} $$ 程序运行结果如下: ``` 初值: x0 = ( 0.000000 0.000000 0.000000 ) 第1次迭代: x1 = ( 0.700000 0.727273 0.600000 ) 第2次迭代: x2 = ( 0.886364 0.965909 0.690909 ) 第3次迭代: x3 = ( 0.988636 1.000000 0.923864 ) 第4次迭代: x4 = ( 0.992678 1.006068 0.980345 ) 第5次迭代: x5 = ( 0.998454 1.001073 0.997358 ) 第6次迭代: x6 = ( 0.999484 1.000218 0.999312 ) 第7次迭代: x7 = ( 0.999933 1.000043 0.999877 ) 第8次迭代: x8 = ( 0.999991 1.000008 0.999967 ) 第9次迭代: x9 = ( 0.999998 1.000001 0.999993 ) 第10次迭代: x10 = ( 1.000000 1.000000 0.999998 ) 第11次迭代: x11 = ( 1.000000 1.000000 1.000000 ) ``` 至此,线性方程组迭代已经达到了精度要,收敛到了精确

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值