//雅克比迭代
//G_S迭代
//解线性方程
#include <stdio.h>
#include <math.h>
#define N 3
void JacobiDiedai(float w);
float max(float a[]);
float b[N][N]={{0,-0.4,-0.2},{0.25,0,-0.5},{-0.2,0.3,0}};
float f[N]={-2.4,5,0.3};
float x[N]={0};
float y[N]={0};//用y[n]记录x[n]的前一次迭代
void main()
{
JacobiDiedai(1e-3);
}
void JacobiDiedai(float w)
{
int i,j,k;
float flag;
float m=0,s[N];
printf("\n这是雅克比迭代结果:\n");
for(k=1;;k++)
{
printf("\n%d\t",k);
for(j=0;j<N;j++) y[j]=x[j];
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
m=m+b[i][j]*y[j];
}
x[i]=m+f[i]; m=0;
printf("x%d=%f\t",i+1,x[i]);
s[i]=fabs(x[i]-y[i]);
}
flag=max(s);
if(flag<w) break;
}
printf("\n==========================");
printf("\n最终结果为:\n");
for(i=0;i<N;i++)
printf("x%d=%f\t",i+1,x[i]);
printf("\n");
}
float max(float a[])
{
float n=a[0];
for(int i=0;i<N;i++)
{
if(n<a[i]) n=a[i];
}
return n;
}
雅可比迭代求解线性方程
最新推荐文章于 2022-04-24 21:28:49 发布