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];

}

}

}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部