资源描述:
《jacobi迭代法求解线性方程组》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、//========================================================//此程序用gauss-seidel迭代法对方程组进行近似求解//========================================================#include#include#include//========================================================================//全局变量#defi
2、neN20doublea[N][N];//声明系数矩阵doubleb[N];//声明方程组右边的值(数组)doubleeps;//声明相对误差变量doublex[3]={0,0,0};intiteration;//函数声明voidGetData();//此函数用以进行对系数矩阵赋值voidjacobi();/*声明jacobi()函数,用以对方程的增广矩阵进行简单迭代*/voidshow();//显示最后的结果//=====================================================================//以下是
3、主函数voidmain(){printf("============================================================");printf("此程序运用Jacobi迭代法求解方程组的解");printf("============================================================");GetData();jacobi();show();printf("=================================================
4、===========");}//======================================================================//一下定义GetData()函数voidGetData(){FILE*filename;//定义文件的指针inti,j;if((filename=fopen("D:\gauss_seidel.dat","r+"))==NULL){printf("文件打开失败,退出程序!");exit(0);}for(i=0;i<3;i++)fscanf(filename,"%lf,%lf,%l
5、f,%lf",&a[i][0],&a[i][1],&a[i][2],&b[i]);printf("请输入误差允许量:");scanf("%lf",&eps);printf("");printf("对应的系数和方程右边的结果是:");for(i=0;i<3;i++){for(j=0;j<3;j++){printf("%10lf",a[i][j]);}printf("%10lf",b[i]);}printf("求解方程的准许误差是:%8lf",eps);}//=====================================
6、=============================================//以下是对gauss-seidel函数的定义voidjacobi(){inti,j,flag;doubley[3],sum,temp[3],k;do{flag=1;iteration++;for(i=0;i<3;i++){sum=0.0;for(j=0;j<3;j++){if(j!=i)sum+=a[i][j]*x[j];}y[i]=(b[i]-sum)/a[i][i];}{//此段代码求y[i]-x[i]绝对值得最大值for(i=0;i<3;i++)temp[i]=f
7、abs(y[i]-x[i]);for(i=0;i<2;i++)for(j=1;j<3;j++)if(temp[j]>temp[i])k=temp[j];}//k为最大值if(k<=eps)flag=0;for(i=0;i<3;i++)x[i]=y[i];}while(flag==1);}//===============================================================//以下是对show()函数的定义voidshow(){inti;printf("求解的结果是:");for(i=0;i<3;i++)pri
8、ntf("x[%d]=%10lf