收藏 分销(赏)

实验4 Jacobi迭代法和GS迭代2.doc

上传人:s4****5z 文档编号:8062931 上传时间:2025-02-02 格式:DOC 页数:8 大小:61.50KB 下载积分:10 金币
下载 相关 举报
实验4 Jacobi迭代法和GS迭代2.doc_第1页
第1页 / 共8页
实验4 Jacobi迭代法和GS迭代2.doc_第2页
第2页 / 共8页


点击查看更多>>
资源描述
实验题目 1. Jacobi迭代法 用Jacobi迭代法求解线性方程组,保留四位有效数字(err=1e-4),其中A=[8 -1 1;2 10 -1;1 1 -5]; b=[1 ;4; 3]。 2.Gauss-Seidel迭代法 用Gauss-Seidel迭代法求解线性方程组,保留四位有效数字(err=1e-4),其中A=[8 -1 1;2 10 -1;1 1 -5]; b=[1 ;4; 3]。 3.分别用Jacobi迭代法和Gauss-Seidel迭代法求解方程组 要求精度,初始,最大迭代次数N=25,试比较这几种迭代法的迭代次数和收敛速度。 1.程序: #include<math.h> #include<stdio.h> int main(){ int n=3,i,k,j,mm=1000;//最大迭代次数; float t,x[mm][n],dx[n],dx_max=1,err=1e-4;//精度 for(i=0;i<n;i++) x[0][i]=0; float a[3][3]={8,-1,1,2,10,-1,1,1,-5}; float b[3]={1,4,3}; for(i=0;i<n;i++){ b[i]=b[i]/a[i][i]; } for(i=0;i<n;i++){ for(j=0;j<n;j++) if(j!=i) a[i][j]=a[i][j]/a[i][i]; a[i][i]=0; } printf("精度1e-4时,解x'[%d]=\n",n); for(k=0;dx_max>1e-8;k++){ dx_max=0; for(i=0;i<n;i++){ t=0; for(j=0;j<n;j++) t+=a[i][j]*x[k][j]; x[k+1][i]=b[i]-t; printf("%0.4f ",x[k+1][i]); dx[i]=x[k+1][i]-x[k][i]; dx_max+=pow(dx[i],2); } printf(" %d",k+1); printf("\n"); } printf("\n"); } 程序结果: 精度1e-4时,解x'[3]= 0.1250 0.4000 -0.6000 1 0.2500 0.3150 -0.4950 2 0.2262 0.3005 -0.4870 3 0.2234 0.3061 -0.4947 4 0.2251 0.3058 -0.4941 5 0.2250 0.3056 -0.4938 6 0.2249 0.3056 -0.4939 7 0.2249 0.3056 -0.4939 8 2.程序: #include<math.h> #include<stdio.h> int main(){ int n=3,i,k,j,mm=1000;//最大迭代次数; float t,x[mm][n],dx[n],dx_max=1,err=1e-4;//精度 for(i=0;i<n;i++) x[0][i]=0; float a[3][3]={8,-1,1,2,10,-1,1,1,-5}; float b[3]={1,4,3}; for(i=0;i<n;i++){ b[i]=b[i]/a[i][i]; } for(i=0;i<n;i++){ for(j=0;j<n;j++) if(j!=i) a[i][j]=a[i][j]/a[i][i]; a[i][i]=0; } printf("精度1e-4时,解x'[%d]=\n",n); for(k=0;dx_max>1e-8;k++){ dx_max=0; for(i=0;i<n;i++){ if(i==0){ t=0; for(j=i+1;j<n;j++) t+=a[i][j]*x[k][j]; x[k+1][i]=b[i]-t; } else{ t=0; for(j=0;j<=i-1;j++)t+=a[i][j]*x[k+1][j]; for(j=i+1;j<n;j++)t+=a[i][j]*x[k][j]; x[k+1][i]=b[i]-t; } printf("%0.4f ",x[k+1][i]); dx[i]=x[k+1][i]-x[k][i]; dx_max+=pow(dx[i],2); } printf("\n"); } printf("\n"); } 程序结果: 精度1e-4时,解x'[3]= 0.1250 0.3750 -0.5000 0.2344 0.3031 -0.4925 0.2245 0.3059 -0.4939 0.2250 0.3056 -0.4939 0.2249 0.3056 -0.4939 3. Jacobi迭代法程序: #include<math.h> #include<stdio.h> int main(){ int n=6,i,k,j,mm=1000;//最大迭代次数; float t,x[mm][n],dx[n],dx_max=1,err=1e-5;//精度 for(i=0;i<n;i++) x[0][i]=0; float a[6][6]={4,-1,0,-1,0,0,-1,4,-1,0,-1,0,0 ,-1 ,4 ,0 ,0 ,-1,-1, 0, 0 ,4 ,-1 ,0, 0 ,-1 ,0 ,-1, 4 ,-1,0 ,0 ,-1, 0, -1 ,4}; float b[6]={0 ,5 ,0 ,6 ,-2, 6}; for(i=0;i<n;i++){ b[i]=b[i]/a[i][i]; } for(i=0;i<n;i++){ for(j=0;j<n;j++) if(j!=i) a[i][j]=a[i][j]/a[i][i]; a[i][i]=0; } printf("精度1e-4时,解x'[%d]=\n",n); for(k=0;dx_max>pow(err,2);k++){ dx_max=0; for(i=0;i<n;i++){ t=0; for(j=0;j<n;j++) t+=a[i][j]*x[k][j]; x[k+1][i]=b[i]-t; printf("%0.4f ",x[k+1][i]); dx[i]=x[k+1][i]-x[k][i]; dx_max+=pow(dx[i],2); } printf(" %d",k+1); printf("\n"); } printf("\n"); } 程序结果: a的对角变0处理后的(a[6][6],b[6])= 0.0000 -0.2500 0.0000 -0.2500 0.0000 0.0000 0.0000 -0.2500 0.0000 -0.2500 0.0000 -0.2500 0.0000 1.2500 0.0000 -0.2500 0.0000 0.0000 0.0000 -0.2500 0.0000 -0.2500 0.0000 0.0000 0.0000 -0.2500 0.0000 1.5000 0.0000 -0.2500 0.0000 -0.2500 0.0000 -0.2500 -0.5000 0.0000 0.0000 -0.2500 0.0000 -0.2500 0.0000 1.5000 精度1e-005时,解x'[6]= 0.0000 1.2500 0.0000 1.5000 -0.5000 1.5000 1 0.6875 1.1250 0.6875 1.3750 0.5625 1.3750 2 0.6250 1.7344 0.6250 1.8125 0.4688 1.8125 3 0.8867 1.6797 0.8867 1.7734 0.8398 1.7734 4 0.8633 1.9033 0.8633 1.9316 0.8066 1.9316 5 0.9587 1.8833 0.9587 1.9175 0.9417 1.9175 6 0.9502 1.9648 0.9502 1.9751 0.9296 1.9751 7 0.9850 1.9575 0.9850 1.9699 0.9787 1.9699 8 0.9819 1.9872 0.9819 1.9909 0.9743 1.9909 9 0.9945 1.9845 0.9945 1.9890 0.9923 1.9890 10 0.9934 1.9953 0.9934 1.9967 0.9907 1.9967 11 0.9980 1.9944 0.9980 1.9960 0.9972 1.9960 12 0.9976 1.9983 0.9976 1.9988 0.9966 1.9988 13 0.9993 1.9979 0.9993 1.9985 0.9990 1.9985 14 0.9991 1.9994 0.9991 1.9996 0.9988 1.9996 15 0.9997 1.9993 0.9997 1.9995 0.9996 1.9995 16 0.9997 1.9998 0.9997 1.9998 0.9995 1.9998 17 0.9999 1.9997 0.9999 1.9998 0.9999 1.9998 18 0.9999 1.9999 0.9999 1.9999 0.9998 1.9999 19 1.0000 1.9999 1.0000 1.9999 1.0000 1.9999 20 1.0000 2.0000 1.0000 2.0000 0.9999 2.0000 21 1.0000 2.0000 1.0000 2.0000 1.0000 2.0000 22 1.0000 2.0000 1.0000 2.0000 1.0000 2.0000 23 1.0000 2.0000 1.0000 2.0000 1.0000 2.0000 24 1.0000 2.0000 1.0000 2.0000 1.0000 2.0000 25 Gauss-Seidel迭代法程序: #include<math.h> #include<stdio.h> int main(){ int n=6,i,k,j,mm=25;//最大迭代次数; float t,x[mm][n],dx[n],dx_max=1,err=1e-5;//精度 for(i=0;i<n;i++) x[0][i]=0; float a[6][6]={4,-1,0,-1,0,0,-1,4,-1,0,-1,0,0 ,-1 ,4 ,0 ,0 ,-1,-1, 0, 0 ,4 ,-1 ,0, 0 ,-1 ,0 ,-1, 4 ,-1,0 ,0 ,-1, 0, -1 ,4}; float b[6]={0 ,5 ,0 ,6 ,-2, 6}; for(i=0;i<n;i++){ b[i]=b[i]/a[i][i]; } for(i=0;i<n;i++){ for(j=0;j<n;j++) if(j!=i) a[i][j]=a[i][j]/a[i][i]; a[i][i]=0; } printf("精度1e-4时,解x'[%d]=\n",n); for(k=0;dx_max>pow(err,2)&&k<mm;k++){ dx_max=0; for(i=0;i<n;i++){ if(i==0){ t=0; for(j=i+1;j<n;j++) t+=a[i][j]*x[k][j]; x[k+1][i]=b[i]-t; } else{ t=0; for(j=0;j<=i-1;j++)t+=a[i][j]*x[k+1][j]; for(j=i+1;j<n;j++)t+=a[i][j]*x[k][j]; x[k+1][i]=b[i]-t; } printf("%0.4f ",x[k+1][i]); dx[i]=x[k+1][i]-x[k][i]; dx_max+=pow(dx[i],2); } printf(" %d\n",k+1); } printf("\n"); } 程序结果: a对角0化处理后的(a[6][6],b[6][1])= 0.0000 -0.2500 0.0000 -0.2500 0.0000 0.0000 0.0000 -0.2500 0.0000 -0.2500 0.0000 -0.2500 0.0000 1.2500 0.0000 -0.2500 0.0000 0.0000 0.0000 -0.2500 0.0000 -0.2500 0.0000 0.0000 0.0000 -0.2500 0.0000 1.5000 0.0000 -0.2500 0.0000 -0.2500 0.0000 -0.2500 -0.5000 0.0000 0.0000 -0.2500 0.0000 -0.2500 0.0000 1.5000 精度1e-005时,解x'[6]= 0.0000 1.2500 0.3125 1.5000 0.1875 1.6250 1 0.6875 1.5469 0.7930 1.7188 0.7227 1.8789 2 0.8164 1.8330 0.9280 1.8848 0.8992 1.9568 3 0.9294 1.9391 0.9740 1.9572 0.9633 1.9843 4 0.9741 1.9778 0.9905 1.9843 0.9866 1.9943 5 0.9905 1.9919 0.9966 1.9943 0.9951 1.9979 6 0.9966 1.9971 0.9987 1.9979 0.9982 1.9992 7 0.9987 1.9989 0.9995 1.9992 0.9994 1.9997 8 0.9995 1.9996 0.9998 1.9997 0.9998 1.9999 9 0.9998 1.9999 0.9999 1.9999 0.9999 2.0000 10 0.9999 1.9999 1.0000 2.0000 1.0000 2.0000 11 1.0000 2.0000 1.0000 2.0000 1.0000 2.0000 12 1.0000 2.0000 1.0000 2.0000 1.0000 2.0000 13 1.0000 2.0000 1.0000 2.0000 1.0000 2.0000 14
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服