您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 雅可比迭代法和高斯-赛德尔迭代法
题目:使用雅可比迭代法和高斯-赛德尔迭代法求解线性方程组,C语言实现本人编写了一个特定的解决方案程序,并且利用其对课本156页例1进行验证,主要代码和运行结果如下:1.代码:#includestdio.h#includemath.h#defineN3/**使用雅可比迭代法和高斯-赛德尔迭代法求解线性方程组*/main(){floatNF2(float*x,float*y);floatA[N][N],b[N],sum=0;floatx[N],y[N]={0},x0[N];inti,j,n=0;//输入系数矩阵printf(pleaseinputtheCoefficientMatrix:);for(i=0;iN;i++){for(j=0;jN;j++){scanf(%f,&A[i][j]);}}//输入常数矩阵printf(pleaseinputtheConstantMatrix:);for(i=0;iN;i++){scanf(%f,&b[i]);}//输入解的初值printf(Pleaseinputtheinitialvector:);for(i=0;iN;i++){scanf(%f,&x0[i]);}//输出系数矩阵printf(showyourtheCoefficientMatrix:\n);for(i=0;iN;i++){for(j=0;jN;j++){printf(%3.1f,A[i][j]);}printf(\n);}//输出成数矩阵printf(showyourtheConstantMatrix:\n);for(i=0;iN;i++){printf(%3.1f\n,b[i]);}//输出解的迭代初值printf(showyourtheInitialVector:\n);for(i=0;iN;i++){printf(%3.1f\n,x0[i]);}/**利用雅可比迭代法求解线性方程组*/for(i=0;iN;i++){x[i]=x0[i];}for(n=0;;n++){//计算下一个值for(i=0;iN;i++){sum=0;for(j=0;jN;j++){if(j!=i){sum=sum+A[i][j]*x[j];}}y[i]=(1/A[i][i])*(b[i]-sum);//sum=0;}//判断误差大小if(NF2(x,y)0.01){for(i=0;iN;i++){x[i]=y[i];}}elsebreak;}printf(经过%d次雅可比迭代解出方程组的解:\n,n+1);for(i=0;iN;i++){printf(%f,y[i]);}/**利用高斯-赛德尔迭代法求解线性方程组*/for(i=0;iN;i++){x[i]=x0[i];y[i]=0;}for(n=0;;n++){//计算下一个值for(i=0;iN;i++){sum=0;for(j=0;ji;j++){sum=sum+A[i][j]*y[j];}for(j=i+1;jN;j++){sum=sum+A[i][j]*x[j];}y[i]=(1/A[i][i])*(b[i]-sum);//sum=0;}//判断误差大小if(NF2(x,y)0.01){for(i=0;iN;i++){x[i]=y[i];}}elsebreak;}printf(\n经过%d次高斯-赛德尔迭代解出方程组的解:\n,n+1);for(i=0;iN;i++){printf(%f,y[i]);}}//求两个向量差的二范数函数floatNF2(float*x,float*y){inti;floatz,sum1=0;for(i=0;iN;i++){sum1=sum1+pow(y[i]-x[i],2);}z=sqrt(sum1);returnz;}2.运行结果
本文标题:雅可比迭代法和高斯-赛德尔迭代法
链接地址:https://www.777doc.com/doc-1956933 .html