用C语言实现雅可比迭代法

#include "stdlib.h"
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "math.h"
#define N 100
float Table(int n,float a[N][N],float b[N])
{
int i,j;
float c[N][N];
printf("请输入矩阵的行!\n");
for(i=0;i{
printf("请输入行 %d:",i+1);
for(j=0;jscanf("%f",&a[i][j]);
}
printf("请输入向量b:");
for(i=0;iscanf("%f",&b[i]);
for(i=0;ifor(j=0;j{
if(i==j)
{
c[i][j]=0;
continue;
}
c[i][j]=-a[i][j]/a[i][i];
}
printf("\n矩阵A和向量b:\n");
for(i=0;i{
for(j=0;jprintf("%10.5f",a[i][j]);
printf("%10.5f",b[i]);
printf("\n");
}

printf("\n高斯-赛德尔迭代的方案:\n");
for(i=0;i{
for(j=0;jprintf("%10.5f",c[i][j]);
printf("%10.5f",b[i]/a[i][i]);
printf("\n");
}
}
float init_vec(int n,float x[N])
{
int i;
printf("请输入初始迭代向量x:");
for(i=0;iscanf("%f",&x[i]);
printf("\n初始迭代向量x:\n");
for(i=0;iprintf("%10.5f",x[i]);
printf("\n");
}
float jacobi(int n,float a[N][N],float b[N],float x[N])
{
int i,j,k;
float tmp,x2[N];
for(k=0;;k++)
{
for(i=0;ix2[i]=x[i];
for(i=0;i{
tmp=0.0;
for(j=0;j{
if(j==i) continue;
tmp+=a[i][j]*x2[j];
}
x[i]=(b[i]-tmp)/a[i][i];
}
for(i=0,j=0;iif(fabs(x2[i]-x[i])<0.00001) j++;
if(j==n)
{
printf("\n这个高斯-赛德尔迭代方案收敛!\n");
printf("迭代次数:%d",k+1);
break;
}
if(k==499)
{
printf("\n这雅可比迭代计划可能不收敛!");
break;
}
}
printf("\n结果为:\n");
for(i=0;iprintf("%12.7f",x[i]);
}
int main()
{
int n;
float x[N],a[N][N],b[N];
printf("请输入n:");
scanf("%d",&n);
Table(n,a,b);
init_vec(n,x);
jacobi(n,a,b,x);
getch();
}


相关文档
最新文档