📄 seidel.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#define MAX_n 100
#define PRECISION 0.000001
#define MAX_Number 1000
void VectorInput(float x[],int n)
{
int i;
for(i=1;i<=n;i++)
{
printf("x[%d]=",i);
scanf("%f",&x[i]);
}
}
void MatrixInput(float A[][MAX_n],int m,int n)
{ int i,j;
printf("\nBegin input Matrix elements\n");
for(i=1;i<=m;++i)
{
printf("Input_Line %d:",i);
for(j=1;j<=n;++j)
scanf("%f",&A[i][j]);
}
}
void VectorOutput(float x[],int n)
{ int i;
for(i=1;i<=n;++i)
printf("\nx[%d]=%f",i,x[i]);
}
int IsSatisfyPrecision(float x1[],float x2[],int n)
{ int i;
for(i=1;i<=n;++i)
if(fabs(x1[i]-x2[i])>PRECISION)
return 1;
return 0;
}
int Jacobi_(float A[][MAX_n],float x[],int n)
{
float x_former[MAX_n];
int i,j,k;
printf("\nInput vector x0:\n");
VectorInput(x,n);
k=0;
do{
for(i=1;i<=n;++i)
{
printf("\nx[%d]=%f",i,x[i]);
x_former[i]=x[i];
}
printf("\n");
for(i=1;i<=n;++i)
{ x[i]=A[i][n+1];
for(j=1;j<=n;++j)
if(j!=i)x[i]-=A[i][j]*x[j];
if(fabs(A[i][i])>PRECISION)
x[i]/=A[i][i];
else return 1;
}
++k;
}while(IsSatisfyPrecision(x,x_former,n)&&k<MAX_Number);
if(k>=MAX_Number)
return 1;
else
{ printf("\nG-S %d times!",k);
return 0;
}
}
int main()
{ int n;
float A[MAX_n][MAX_n],x[MAX_n];
printf("\nInput n=");
scanf("%d",&n);
if(n>=MAX_n-1)
{
printf("\n\007 n must<%d!",MAX_n);
exit(0);
}
MatrixInput(A,n,n+1);
if(Jacobi_(A,x,n))
printf("\nG-S Failed!");
else
{
printf("\nOutput Solution:");
VectorOutput(x,n);
}
printf("\n\nPress any key to quit! \n");
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -