#include <stdio.h>
#include <stdlib.h>
#define MAX 10
double A[MAX][MAX];
double b[MAX];
double X[MAX];
double Y[MAX];
double X0[MAX];
int NUM;
double epsilon=1e-5;
void Input_Matrix()//输入矩阵
{
int i,j;
printf("系数矩阵A的阶数:\n");
scanf("%d",&NUM);
for(i=1; i<=NUM; i++)
{
printf("系数矩阵A的第%d行元素:\n",i);
for(j=1; j<=NUM; j++)
scanf("%lf",&A[i-1][j-1]);
}
printf("右端项b:\n");
for(i=1; i<=NUM; i++)
{
scanf("%lf",&b[i-1]);
}
printf("输入的系数矩阵A:\n");
for(i=0; i<NUM; i++)
{
for(j=0; j<NUM; j++)
printf("%.4lf\t",A[i][j]);
printf("\n");
}
printf("输入的右端项b:\n");
for(i=0; i<NUM; i++)
printf("%.4lf\n",b[i]);
printf("\n");
printf("输入初值X0:\n");
for(i=1; i<=NUM; i++)
{
scanf("%lf",&X0[i-1]);
}
}
double NF2()
{
int i;
double z,sum1=0;
for(i=0; i<NUM; i++)
{
sum1+=pow(Y[i]-X[i],2);
}
z=sqrt(sum1);
return z;
}
int main()
{
int i,j;
double sum;
Input_Matrix();
//雅可比迭代法
for(i=0; i<NUM; i++)
{
Y[i]=X0[i];
}
printf("\n");
printf("雅可比迭代法\n");
printf("迭代过程如下:\n");
do
{
for(i=0; i<NUM; i++)
{
X[i]=Y[i];
}
for(i=0; i<NUM; i++)
{
sum=0;
for(j=0; j<NUM; j++)
{
if(j!=i)
sum+=A[i][j]*X[j];
}
Y[i]=(b[i]-sum)/A[i][i];
}
for(i=0; i<NUM; i++)
{
printf("%lf\t",Y[i]);
}
printf("\n");
}
while(NF2()>epsilon);
printf("解出方程组的解:\n");
for(i=0; i<NUM; i++)
{
printf("%lf\t",Y[i]);
}
}
C语言实现雅可比迭代(计算方法)
最新推荐文章于 2024-09-29 18:34:21 发布