c语言雅克比迭代法求方程组
时间: 2023-07-02 12:05:39 浏览: 96
雅可比迭代法是一种用于求解线性方程组的迭代方法,其基本思想是将线性方程组的系数矩阵分解为一个对角矩阵和一个非对角矩阵的和,然后将方程组的解逐步逼近真解。
C语言实现雅可比迭代法求解方程组的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 3
int main()
{
double A[N][N] = {{4, -1, 0}, {-1, 4, -1}, {0, -1, 4}}; // 系数矩阵
double b[N] = {10, 10, 10}; // 常数向量
double x[N] = {0, 0, 0}; // 初值向量
double x_new[N] = {0, 0, 0}; // 新的解向量
double eps = 1e-9; // 精度要求
int max_iter = 10000; // 最大迭代次数
int iter = 0; // 迭代次数计数器
double err = 0; // 误差
while (iter < max_iter)
{
// 计算新的解向量
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];
}
}
x_new[i] = (b[i] - sum) / A[i][i];
}
// 计算误差
err = 0;
for (int i = 0; i < N; i++)
{
err += fabs(x_new[i] - x[i]);
}
// 更新解向量
for (int i = 0; i < N; i++)
{
x[i] = x_new[i];
}
// 判断是否满足精度要求
if (err < eps)
{
break;
}
iter++;
}
// 输出结果
printf("Solution:\n");
for (int i = 0; i < N; i++)
{
printf("%.6f ", x[i]);
}
printf("\n");
return 0;
}
```
需要注意的是,在实际使用中,为了提高收敛速度,还可以通过调整系数矩阵的对角线元素来加速迭代。具体方法是,将系数矩阵的对角线元素改为非零元素的绝对值之和。这样一来,每次迭代的误差就会减小,收敛速度也会加快。
阅读全文