Gauss_Seidel

#include<stdio.h>
#include<math.h>
float cal(float X[],float A[10][10],int i,int s,int n)
{
int j;
float sum=0;
for(j=s;j<=n;++j)
sum=sum+A[i][j]*X[j];
return sum; 
}
float jacobi(int n,int N,float A[10][10],float B[10],float flag,float X[10])
{


int k=1,i,j,l;
float Xi[10],temp[10];
for(i=1;i<=n;++i)
temp[i]=X[i];
printf("k    ");
for(l=1;l<=n;++l)
printf("X%d      ",l);
printf("\n");
while(k<=N)
{
printf("%d ",k-1);
for(l=1;l<=n;++l)
{
printf("%f ",X[l]);
}
printf("\n");
for(i=1;i<=n;++i)
{
Xi[i]=(-cal(temp,A,i,1,i-1)-cal(temp,A,i,i+1,n)+B[i])/A[i][i];
temp[i]=Xi[i];


}


for(j=1;j<=n;++j)
{
if(fabs(Xi[j]-X[j])<flag)
{
return 1;
}
}
k++;
for(j=1;j<=n;++j)
{
X[j]=Xi[j];


}
}
return 0;
}
int main(){
int i,j,n,N;
float A[10][10],B[10],flag,X[10];
printf("方程组的未知个数n;系数矩阵A;常数项b;初始值X;精度要求flag;最大迭代次数N.");
scanf("%d",&n);

//
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%f",&A[i+1][j+1]);
for(i=1;i<=n;++i)
scanf("%f",&B[i]);
for(i=1;i<=n;++i)
scanf("%f",&X[i]);
scanf("%f",&flag);
scanf("%d",&N);
if(jacobi(n,N,A,B,flag,X))
{
printf("The anser:\n");
for(i=1;i<=n;++i)
printf("%f ",X[i]);
}else
printf("error!\n");
printf("\n");
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值