一、代码:
#include<stdio.h>
#define Max 10
int matrixA[Max][Max];
int matrixb[Max][1];
float x[Max];
int num;
void jacobi(float x[Max], int matrixA[Max][Max], int matrixb[Max][1], int count)
{
float x_new[Max];
int degree;
int i = 0, j = 0;
for(degree = 0; degree < count; degree++)
{
for(i = 0; i <= num; i++)
{
x_new[i] = (float)matrixb[i][0];
for(j = 0; j <= num; j++)
{
if (j == i) continue;
x_new[i] = (x_new[i] - matrixA[i][j] * x[j]);
}
x_new[i] = x_new[i]/matrixA[i][i];
}
for (i = 0; i <= num; i++)
{
x[i] = x_new[i];
}
}
}
int main()
{
int i, j;
//迭代次数
int count;
//输入
printf("开始输入矩阵A:\n");
for(i = 0; i < Max; i++)
{
for(j = 0; j < Max; j++)
{
scanf("%d", &matrixA[i][j]);
if(getchar() == '\n') break;
}
if (i == j)
{
num = i;
break;
}
}
printf("开始输入矩阵b:\n");
for(i = 0; i <= num; i++)
{
scanf("%d", &matrixb[i][0]);
}
//输入x初始值
printf("开始输入x初始值:\n");
for(i = 0; i <= num; i++)
{
scanf("%f", &x[i]);
}
printf("输入迭代次数:\n");
scanf("%d", &count);
//进入迭代
jacobi(x, matrixA, matrixb, count);
//输出
printf("迭代结果为:\n");
for(i = 0; i <= num; i++)
{
printf("输出x[%d]为:", i+1);
printf("%.2f\n", x[i]);
}
return 0;
}
二、输入规则:
请按以下测试图片中格式输入;
注意矩阵A要满足严格对角占优。否则可能不收敛。