最新雅克比迭代法.docx
- 文档编号:30307179
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:18
- 大小:154.30KB
最新雅克比迭代法.docx
《最新雅克比迭代法.docx》由会员分享,可在线阅读,更多相关《最新雅克比迭代法.docx(18页珍藏版)》请在冰豆网上搜索。
最新雅克比迭代法
实验课程名称:
数值分析
实验项目名称
运用插值法
实验成绩
实验者
江骏
专业班级
软件0803
组别
同组者
实验日期
年月日
第一部分:
实验分析与设计
一、实验内容描述
研究用Jacobi迭代法与Gauss-Seidel迭代法解下列方程组Ax=b的收敛性,通过上机计算,验证分析是否正确,并观察右端项对迭代收敛是否有影响,比较两法的收敛速度
松弛因子对超松弛因子迭代法收敛速度的影响,要求对不同的阶数进行迭代
观察欧拉显式方法的收敛性
观察欧拉隐式方法的收敛性
写出实验报告
二、实验基本原理与设计
Jacobi迭代法:
∑nj=1aijxj=bi(i=1,2,…,n)
Gauss-Seidel迭代法:
xi(K+1)=[bi-∑i-1j=1aijxj(k+1)-∑nj=i+1aijxj(k)]/aij
超松弛因子迭代法:
Dx(k+1)=Dx(k)+Ex(k+1)+Fx(k)+b-Dx(k)
X(k+1)=x(k)+D-1R
三角分解法:
利用三角矩阵将方程组化解为两个方程组,从而简化运算。
欧拉显式方法:
在任意节点tn+1=t0+(n+1)h处,u(tn+1)的近似值由Euler公式给出:
un+1=un+hf(tn,un)
欧拉隐式方法:
改进的Euler公式
n+1=yn+hf(xn,yn)
yn+1=yn+
[f(xn,yn)+f(xn+1,
n+1)]
三、主要仪器设备及耗材
WindowsXpVC++6.0
第二部分:
实验调试与结果分析
一、调试过程
Jacobi迭代法
#include
#defineN10
floatABS(float,float);
int
main(void)
{
inti,j,n;
floata[N][N],b[N];
floatx[N],y[N];
floate,total;
printf("Pleaseinputthedimension:
");
scanf("%d",&n);
printf("PleaseinputtheCoefficientMatrix:
");
for(i=0;i for(j=0;j scanf("%f",&a[i][j]); printf("PleaseinputtheVector: "); for(i=0;i scanf("%f",&b[i]); printf("Pleaseinputtheinitialvector: "); for(i=0;i scanf("%f",&x[i]); do { for(i=0;i { total=0.0f; for(j=0;j { if(i! =j) total+=a[i][j]*x[j]; } y[i]=(b[i]-total)/a[i][i]; } e=0.0f; for(j=0;j e=e+ABS(x[j],y[j]); printf("%f\n",e); for(i=0;i x[i]=y[i]; } while(e>0.0001); for(i=0;i printf("x%d=%f\t",i,x[i]); printf("\n"); return0; } floatABS(floatx,floaty) { inttotal; if(x elsetotal=x-y; returntotal; } 结果: 流程图: Gauss-Seidel迭代法 #include intmain() { doublex[3]={0,0,0}; doublea[3][3]={6,2,-1,1,4,-2,-3,1,4}; doubley[3]={-3,2,4}; doubled[3][3],g[3]; intround=5,i,j; for(i=0;i<3;++i) { g[i]=y[i]/a[i][i]; for(j=0;j<3;++j) { d[i][j]=i==j? 0: -a[i][j]/a[i][i]; } } while(round--){ for(i=0;i<3;++i) { x[i]=g[i]; for(j=0;j<3;++j) { x[i]+=d[i][j]*x[j]; } printf("%lf",x[i]); } printf("\n"); } } 结果: 流程图: 超松弛因子迭代法 #include #include usingnamespacestd; float*one_array_malloc(intn); float**two_array_malloc(intm,intn); floatmatrix_category(float*x,intn); intmain(){constintMAX=100; intn,i,j,k;float**a;float*x_0; float*x_k; floatprecision;floatw; cout<<"输入精度e: "; cin>>precision; cout< "; cin>>n;a=two_array_malloc(n,n+1); cout< \n"; for(i=0;i { for(j=0;j {cin>>a[i][j];} } x_0=one_array_malloc(n); cout< \n"; for(i=0;i {cin>>x_0[i];} x_k=one_array_malloc(n); cout<<"输入松弛因子w(1 \n"; cin>>w; floattemp; for(k=0;k {for(i=0;i {temp=0; for(j=0;j {temp=temp+a[i][j]*x_k[j];} x_k[i]=a[i][n]-temp; temp=0; for(j=i+1;j {temp=temp+a[i][j]*x_0[j];} x_k[i]=(x_k[i]-temp)/a[i][i]; x_k[i]=(1-w)*x_0[i]+w*x_k[i];} for(i=0;i {x_0[i]=x_k[i]-x_0[i];} if(matrix_category(x_0,n) {break;} else{for(i=0;i {x_0[i]=x_k[i];} } } if(MAX==k) {cout<<"迭代不收敛\n";} cout<<"迭代次数为: "< cout<<"解向量为: \n"; for(i=0;i {cout<<"x"< "< return0; } float*one_array_malloc(intn) {float*a; a=(float*)malloc(sizeof(float)*n); returna; } float**two_array_malloc(intm,intn) {float**a; inti; a=(float**)malloc(m*sizeof(float*)); for(i=0;i {a[i]=(float*)malloc(n*sizeof(float));} returna; } floatmatrix_category(float*x,intn) {inti;floattemp=0;for(i=0;i {temp=temp+fabs(x[i]);} returntemp; } 结果: 流程图: 三角分解法 #include usingnamespacestd; intmain() { constintN=100; staticdoublea[N][N],b[N]; inti,j,k,num,p; doublem,t,q; cout<<"请输入矩阵阶数: "; cin>>num; //输入a[i][j],b[i] cout<<"nowinputthematrixa[i][j],i,j=1..."< "< for(i=1;i<=num;i++) { for(j=1;j<=num;j++) { cout<<"a["< cin>>a[i][j]; } } cout<<"nowinputthematrixb[i],i=1..."< "< for(i=1;i<=num;i++) { cout<<"b["< cin>>b[i]; } t=0; for(i=1;i<=num;i++) { m=0; for(j=i;j<=num+1;j++) { for(k=1;k<=i-1;k++) m=m+a[i][k]*a[k][j]; a[i][j]=a[i][j]-m; } for(j=i+1;j<=num;j++) { for(k=1;k<=i-1;k++) t=t+a[j][k]*a[k][i]; a[j][i]=(a[j][i]-t)/a[i][i]; } } a[num][num+1]=a[num][num+1]/a[num][num]; q=0; for(k=num-1;k>=1;k--) { for(j=k+1;j<=num;j++) q=q+a[k][j]*a[j][num+1]; a[k][num+1]=(a[k][num+1]-q)/a[k][k]; } cout<<"方程组的解为: "; for(i=1;i<=num;i++) cout<<"x["< return0; } 结果: 流程图: 欧拉显式方法 #include #include #include doublef(doublex,doubley) { returnx*pow(y,1.0/3); } intmain() { inti; doublex,y,y0=1,dx=0.1; doublexx[11]; doubleeuler[11],euler_2[11]; doubletemp; doublef(doublex,doubley); for(i=0;i<11;i++) xx[i]=i*dx; euler[0]=y0; for(i=1,x=0;i<11;i++,x+=dx) euler[i]=euler[i-1]+dx*f(x,euler[i-1]); euler_2[0]=y0; for(i=1,x=0;i<11;i++,x+=dx) { temp=euler_2[i-1]+dx*f(x,euler_2[i-1]); euler_2[i]=euler_2[i-1]+dx*(f(x,euler_2[i-1])+f(x+dx,temp))/2; } for(i=0,x=0;i<11;i++,x+=dx) printf("x=%lf\teluer=%lf\teuler_2=%lf\taccu=%lf\n",x,euler[i],euler_2[i],pow(1+x*x,1.0/3)); getch(); } 结果: 流程图: 欧拉隐式方法 #include #include #definef(x,y)(x+y) intmain() {intm; inti; doublea,b,y0; doublexn,yn,xn1,yn1,yn1b; doubleh; printf("\nInputthebeginandendofx: "); scanf("%lf%lf",&a,&b); printf("Inputtheyvalueat%f: ",a); scanf("%lf",&y0); printf("Inputmvalue[divide(%f,%f)]: ",a,b); scanf("%d",&m); if(m<=0) {printf("Pleaseinputanumberlargerthan1.\n"); return (1); } h=(b-a)/m; xn=a;yn=y0; for(i=1;i<=m;i++) {xn1=xn+h; yn1b=yn+h*f(xn,yn); yn1=yn+h/2*(f(xn,yn)+f(xn1,yn1b)); printf("x%d=%f,y%d=%f\n",i,xn1,i,yn1); xn=xn1; yn=yn1; }return(0); } 结果: 流程图: 二、实验结果及分析 雅克比迭代法的全部分量都是间接利用,由于新值比旧值好,Gauss-Seidel迭代法直接对算出的分量加以使用,这样使得迭代的收敛情况有所改善,而超松弛法是在Gauss-Seidel迭代法的基础上,应用加速收敛思想而构造的一种方法;欧拉公式和梯形公式在计算上有明显的区别,欧拉公式的特点是可以有UN直接计算Un+1,也就是显式的,而梯形公式右端也有Un+1,必须通过解方程才能求得,这类是隐式的。 从算法的角度看显式远比隐式方便,隐式通常用迭代法求解。 三、实验小节、建议及体会 任何一种方法都有它的优点和局限性,只有找到一种方法能够解决我们的问题,又尽量减少出错,减少计算量就是符合这个问题的好方法。 良好的编程习惯有助于检查错误,也可以增强程序的可阅读性。 信息技术在教学中的应用和反思 通过的近期信息技术提升培的学习,结合教学教学中相关信息技术的应用和周边教师信息技术使用过程的讨论,个人对在现代信息技术手段在教学中应用有引起感触,现整理如下,仅供大家批评指正: 一、信息技术的重要性 随着信息技术使用的走进了人们的工作、生活、学习,尤其在教育教学活动中的地位作用日趋重要。 信息技术走进了日常教学中,改变了传统的教学模式。 将信息技术与教学相整合,提高教学效率以及培养学生的整体素质和全面能力都具有重要意义。 利用现代化的教育教学工具,寓教于乐,以提高教学的实效性。 信息技术在教学中的有效运用已经成为一个热点问题,它将成为课堂教学中不可缺少的一部分,成为学生学习、研究、探索知识的有力工具。 二、信息技术手段在教学中使用的必要性 1、运用现代信息技术资源备课,为课堂教学打下坚实的基础。 备课是教学中的一个重要环节,授课教师要熟悉教材、钻研教材、考虑教法、学法,提高教学实效的基础。 由于条件比较差,与教材有关的资料比较少。 再加上孩子见得少。 这就要求教师课前必须做好充分的准备,多准备与课文有关的资料,选择适合学生的教学方法。 教师备课前先熟悉钻研教材,再上网查阅优秀教师的备课。 网上的备课各式各样,一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 新雅 迭代法