用C语言实现雅可比迭代法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#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;j
}
printf("请输入向量b:");
for(i=0;i
for(i=0;i
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;j
printf("%10.5f",b[i]);
printf("\n");
}
printf("\n高斯-赛德尔迭代的方案:\n");
for(i=0;i
for(j=0;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;i
printf("\n初始迭代向量x:\n");
for(i=0;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;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;i
if(j==n)
{
printf("\n这个高斯-赛德尔迭代方案收敛!\n");
printf("迭代次数:%d",k+1);
break;
}
if(k==499)
{
printf("\n这雅可比迭代计划可能不收敛!");
break;
}
}
printf("\n结果为:\n");
for(i=0;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();
}