雅克比解方程c语言,雅可比迭代法解方程组的C\C++程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

下面程序是解下面这个方程:(可以改变方程系,程序即可解不同的方程)

方程:

5x1+2x2+x3=8

2x1+8x2-3x3=21

x1-3x2-6x3=1

用VC6.0编译,保存代码时,以.C为后缀名

************************************/

#include

#include

#include

#include

#define EPS 1e-6/*允许误差*/

#define MAX 100/*迭代次数的最大值*/

float *Jacobi(float a[3][4],int n);

main()

{

int i;

float a[3][4]={5,2,1,8,2,8,-3,21,1,-3,-6,1};/*方程的系数*/

float *x;

x=(float *)malloc(3*sizeof(float));/*动态申请内存,用于保存方程的解*/

x=Jacobi(a,3);/*调用雅可比函数*/

for(i=0;i<3;i++)/*输出方程的解*/

{

printf("x[%d]=%f\t",i,x[i]);

}

printf("\n");

getch();

}

float *Jacobi(float a[3][4],int n)

{

float *x,*y;

float epsilon,s;

int i,j,k=0;

x=(float *)malloc(n*sizeof(float));

y=(float *)malloc(n*sizeof(float));

for(i=0;i

x[i]=0;

while(1)

{

epsilon=0;/*容允误差*/

k++;/*迭代次数计数*/

for(i=0;i

{

s=0;

for(j=0;j

{

if(j==i)

{

continue;

}

s+=a[i][j]*x[j];

}

y[i]=(a[i][n]-s)/a[i][i];/*计算"x^(k+1)"*/

epsilon+=(float)fabs(y[i]-x[i]);

}

if(epsilon

{

printf("迭代次数为:%d\n",k);

return x;/*返回方程的解*/

}

if(k>=MAX)

{

printf("方程不收敛\n");

return y;

}

for(i=0;i

{

x[i]=y[i];

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值