利用雅可比迭代法求解如下线性代数方程组的近似解(误差控制限为0.0005,迭代初始值取[0,0,0]:a[3][3] = {{10,-1,-2}, {-1,10,-2}, {-1,-1,5}} b[3]={7.2,8.3,4.2}的C语言代码
时间: 2023-10-04 15:10:52 浏览: 77
以下是使用雅可比迭代法求解线性代数方程组的C语言代码:
```c
#include <stdio.h>
#include <math.h>
#define N 3 // 系数矩阵的阶数
#define MAX_ITER 1000 // 最大迭代次数
#define TOL 0.0005 // 误差控制限
int main()
{
double a[N][N] = {{10, -1, -2}, {-1, 10, -2}, {-1, -1, 5}};
double b[N] = {7.2, 8.3, 4.2};
double x[N] = {0, 0, 0}; // 迭代初值
double x_old[N]; // 存储上一次迭代的值
int iter = 0; // 迭代次数
// 循环迭代
while(iter < MAX_ITER)
{
// 保存上一次迭代的值
for(int i = 0; i < N; i++)
{
x_old[i] = x[i];
}
// 进行一次迭代
for(int i = 0; i < N; i++)
{
double sum = 0;
for(int j = 0; j < N; j++)
{
if(j != i)
{
sum += a[i][j] * x_old[j];
}
}
x[i] = (b[i] - sum) / a[i][i];
}
// 计算误差
double error = 0;
for(int i = 0; i < N; i++)
{
error += pow(x[i] - x_old[i], 2);
}
error = sqrt(error);
// 判断误差是否满足要求
if(error < TOL)
{
break;
}
iter++;
}
// 输出结果
if(iter == MAX_ITER)
{
printf("迭代次数达到上限,未能求得满足误差要求的解。\n");
}
else
{
printf("迭代次数为%d,解为:\n", iter);
for(int i = 0; i < N; i++)
{
printf("%f\n", x[i]);
}
}
return 0;
}
```
该程序使用循环迭代的方式求解线性代数方程组,每次迭代都更新解向量x的值,直到误差满足要求或者达到最大迭代次数为止。程序输出迭代次数和解向量的值。
阅读全文