jacobi迭代法c语言代码
时间: 2023-08-12 09:07:52 浏览: 267
以下是Jacobi迭代法的C语言代码示例:
```c
#include <stdio.h>
#include <math.h>
#define N 3 // 矩阵维数
#define maxIter 100 // 最大迭代次数
#define tol 1e-6 // 精度要求
int main()
{
double A[N][N] = {{4,-1,1},{2,5,2},{1,2,4}}; // 系数矩阵
double b[N] = {12,18,22}; // 右端项
double x[N] = {0}; // 初始解向量
double xNew[N] = {0}; // 新解向量
double err; // 两个解向量之差的二范数
int iter = 0; // 迭代次数计数器
while(iter < maxIter)
{
for(int i=0; i<N; i++) // 遍历每一个未知量
{
double sum = 0;
for(int j=0; j<N; j++) // 遍历当前未知量对应的方程的系数
{
if(i != j)
{
sum += A[i][j] * x[j];
}
}
xNew[i] = (b[i] - sum) / A[i][i];
}
err = 0;
for(int i=0; i<N; i++)
{
err += pow(xNew[i] - x[i], 2);
x[i] = xNew[i];
}
err = sqrt(err);
if(err < tol)
{
printf("Jacobi迭代法成功,迭代次数:%d\n", iter);
for(int i=0; i<N; i++)
{
printf("x%d=%f\n", i+1, x[i]);
}
return 0;
}
iter++;
}
printf("Jacobi迭代法失败,达到最大迭代次数%d仍未满足精度要求%f\n", maxIter, tol);
return 1;
}
```
在这个示例代码中,我们使用了一个`N`阶方阵`A`和一个长度为`N`的列向量`b`来表示线性方程组。在主函数中,我们定义了一个初始解向量`x`和一个新解向量`xNew`,并且使用一个`while`循环进行迭代计算。在每一次迭代中,我们先遍历每个未知量对应的方程的系数,根据Jacobi迭代法的公式进行计算,并更新新的解向量。然后计算两个解向量之差的二范数作为误差,如果误差小于精度要求,则迭代结束,输出解向量和迭代次数;否则继续迭代。如果达到最大迭代次数仍未满足精度要求,则认为Jacobi迭代法失败。
阅读全文