📄 gauss_siedel.cpp
字号:
# include <stdio.h>
# include <math.h>
#define N 3
#define M 100
double fan(double s[N],double t[N]) //无穷范函数
{
int i;
double cha[N];
double max=0;
for(i=0;i<N;i++)
cha[i]=s[i]-t[i];
max=cha[0];
for(i=0;i<N;i++)
{
if(cha[i]>max) max=cha[i];
}
return max;
}
void main()
{
int i,j,k=0;
double a[N][N];double b[N];double x[2][N]={0};
double x1=0,x2=0,x3=0;
double sum1,sum2,sum3;
printf("输入系数距阵:\n");
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
scanf("%lf",&a[i][j]);
printf("\n");
}
printf("\n");
printf("输入常数项:\n");
for(i=0;i<N;i++)
{scanf("%lf",&b[i]);
printf("\n");
}
printf("\n");
printf("输入初解:\n");
for(i=0;i<N;i++)
{ scanf("%lf",&x[0][i]);
printf("\n");
}
printf("\n");
do{
for(k=0;k<M;k++)
{
for(i=0;i<N;i++)
{
sum1=0,sum2=0,sum3=0;
for(j=0;j<i;j++)
{if(i==j&&j==0) sum1=0;
else sum1+=a[i][j]*x[(k+1)%2][j];
}
for(j=i+1;j<N;j++)
sum2+=a[i][j]*x[k%2][j];
sum3=sum1+sum2;
x[(k+1)%2][i]=(b[i]-sum3)/a[i][i];
}
}
}while(fan(&x[(k+1)%2][0],&x[k%2][0])>=0.0001);
printf("最后的结果是:\n");
printf("x1=%lf,x2=%lf,x3=%lf\n",x[(k+1)%2][0],x[(k+1)%2][1],x[(k+1)%2][2]);
printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -