用C语言实现高斯-赛德尔迭代方法

  • 格式:txt
  • 大小:2.74 KB
  • 文档页数:1

#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");
label:for(i=0;i{
printf("Row %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 gs(int n,float a[N][N],float b[N],float x[N])
{
int i,j,k;
float tmp1,tmp2,x2[N];
for(k=0;k<10001;k++)
{
for(i=0;ix2[i]=x[i];
for(i=0;i{
tmp1=0.0;
tmp2=0.0;
for(j=0;jtmp1+=a[i][j]*x[j];
for(j=i+1;jtmp2+=a[i][j]*x2[j];
x[i]=(b[i]-tmp1-tmp2)/a[i][i];
}
for(i=0,j=0;iif(fabs(x2[i]-x[i])<0.00001) j++;
if(j==n)
{
printf("\n这个高斯-赛德尔迭代方案收敛!");
printf("\n迭代次数: %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);
gs(n,a,b,x);
getch();
}

下载文档原格式

  / 1
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。