用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("Please input the matrix A by row!\n");
label:for(i=0;i
{
printf("Row %d:",i+1);
for(j=0;j
scanf("%f",&a[i][j]);
}
printf("Please input the vector b:");
for(i=0;i
scanf("%f",&b[i]);
for(i=0;i
for(j=0;j
{
if(i==j)
{
c[i][j]=0;
continue;
}
c[i][j]=-a[i][j]/a[i][i];
}
printf("\nThe matrix A and vector b:\n");
for(i=0;i
{
for(j=0;j
printf("%10.5f",a[i][j]);
printf("%10.5f",b[i]);
printf("\n");
}
printf("\nThe Gauss-Seidel iterative scheme:\n");
for(i=0;i
{
for(j=0;j
printf("%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("Please input the initial iteration vector x:");
for(i=0;i
scanf("%f",&x[i]);
printf("\nThe initial iteration vector x:\n");
for(i=0;i
printf("%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;i
x2[i]=x[i];
for(i=0;i
{
tmp1=0.0;
tmp2=0.0;
for(j=0;j
tmp1+=a[i][j]*x[j];
for(j=i+1;j
tmp2+=a[i][j]*x2[j];
x[i]=(b[i]-tmp1-tmp2)/a[i][i];
}
for(i=0,j=0;i