c++实现雅各比算法
时间: 2023-11-10 20:49:41 浏览: 135
雅可比算法(Jacobi algorithm)是一种迭代解线性方程组的方法。下面是一个使用 C 语言实现雅可比算法的示例:
```c
#include <stdio.h>
#define SIZE 3
// 定义线性方程组的系数矩阵和常数项向量
double A[SIZE][SIZE] = {{4, -1, 1},
{-1, 4, -2},
{1, -2, 4}};
double b[SIZE] = {5, -6, 5};
// 定义迭代次数和误差容限
int maxIterations = 100;
double tolerance = 1e-6;
// 雅可比算法函数
void jacobi() {
double x[SIZE] = {0}; // 初始化解向量
double x_new[SIZE];
int iteration;
double error;
for (iteration = 0; iteration < maxIterations; iteration++) {
// 进行一次迭代
for (int i = 0; i < SIZE; i++) {
x_new[i] = b[i];
for (int j = 0; j < SIZE; j++) {
if (j != i) {
x_new[i] -= A[i][j] * x[j];
}
}
x_new[i] /= A[i][i];
}
// 计算当前迭代的误差
error = 0;
for (int i = 0; i < SIZE; i++) {
error += (x_new[i] - x[i]) * (x_new[i] - x[i]);
}
// 判断是否达到误差容限
if (error < tolerance * tolerance) {
break;
}
// 更新解向量
for (int i = 0; i < SIZE; i++) {
x[i] = x_new[i];
}
}
// 打印结果
printf("Solution:\n");
for (int i = 0; i < SIZE; i++) {
printf("x[%d] = %.8f\n", i, x_new[i]);
}
}
int main() {
jacobi();
return 0;
}
```
这个示例中,我们解一个大小为3的线性方程组,其中系数矩阵A和常数项向量b定义在全局变量中。雅可比算法函数jacobi()是实现迭代求解的主要部分。在每次迭代中,我们计算新的解向量x_new,并比较当前解向量x与新解向量x_new的差异,判断是否满足误差容限。如果满足,则退出迭代,并打印最终的解向量。
希望对你有所帮助!如果还有其他问题,请随时提问。
阅读全文