jacobi

#include<stdio.h>
#include<math.h>
float cal(float X[],float A[10][10],int i,int n)
{
int j=1;
float sum=0;
for(;j<=n;++j)
if(j!=i)
{
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];
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(X,A,i,n)+B[i])/A[i][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;

}


//eg输入:

//3

//10 -1 -2
//-1 10 -2
//-1 -1 5

//7.2 8.3 4.2

//0 0 0 

//0.000001

//50



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值