雅克比迭代法…… 下载本文

// 输入 a[i][j],b[i] cout< <\…\{ for(j=1;j<=nu m;j++) { cout<<\cin >>a[i][j]; } } cout< <\…\{ cout<<\cin> >b[i]; } t=0; for(i=1;i<=nu m;i++) { m=0; for(j=i;j<=nu m+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<=nu m;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[nu m][ nu m+1]=a[ nu m][ nu m+1]/a[ nu m][ nu m]; q=0; for(k =nu m-1;k>=1;k--) { for(j=k+1;j<=nu m;j++) q=q+a[k][j]*a[j][ num+1]; a[k][ num+1]=(a[k][ nu m+1]-q)/a[k][k]; } cout<<\方程组的解为:\for(i=1;i<=nu m;i++)

cout<<\

return 0;

丿口

*C:\\Docu>ents and Settings\\Ad>inistrator\\Debug\\sanjiao.exe* 歸翩■数:M nou input the matrix 卜

a[i][j],i,j=l...3 : k[l][ll=6 2 ^1 1 4 -2 -3 1 4

k[l][2]-a[l][3]-a[2][l]-a[2][2]-a[2][3]-a[3][l]-a[3][2]-a[3][3]-now input ths ma tpix b[i],i=1...3 :

b[ll=-3 2 4

k2]-b[3]-方程组的解为:x[lJ=0.0697509

L[21=0.0520741

Lc[3 3=0.165049

Press any key to continue

结果: 流程图:

1

开始

矩阵阶数 系数矩阵

for(k=1;k<=i-1;k++) m=m+a[i][k]*a[k][j]; a[i][j]= a[i][j]-m; a[k][ nu m+1]=(a[k][ num+1]-q)/a[k][k]

结束

⑤欧拉显式方法

#in elude

#in elude

#in elude double f(double x,double y) {

return x*pow(y,1.0/3); }

int mai n()

{ int i;

double x,y,y0=1,dx=0.1; double xx[11];

double euler[11],euler_2[11]; double temp;

double f(double x,double y); 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)

prin tf(\}

流程图:

⑥欧拉隐式方法 #in clude #in clude #defi ne f(x,y)(x+y) int mai n() {int m; int i; double a,b,y0;

double xn,yn,xn1,yn1,yn 1b; double h;

prin tf(\prin tf(\

scan f(\

prin tf(\if(m<=0)

{pri ntf(\}

h=(b-a)/m; xn=a;yn=yO; for(i=1;i<=m;i++) {xn 1=x n+h;

yn 1b=yn+h*f(x n,yn);

yn 1=yn+h/2*(f(x n,y n)+f(x n1,y n1b)); prin tf(\xn=xn1; yn=yn1; }return(0); }

流程图:

二、 实验结果及分析

雅克比迭代法的全部分量都是间接利用,由于新值比旧值好, Gauss-Seidel迭代法直接对算出 的分量加以使用,这样使得迭代的收敛情况有所改善,而超松弛法是在 Gauss-Seidel迭代法的 基础上,应用加速收敛思想而构造的一种方法;欧拉公式和梯形公式在计算上有明显的区别, 欧拉公式的特点是可以有 U直接计算U+1,也就是显式的,而梯形公式右端也有 U+1,必须通过解 方程才能求得,这类是隐式的。从算法的角度看显式远比隐式方便,隐式通常用迭代法求解。 三、 实验小节、建议及体会

任何一种方法都有它的优点和局限性,只有找到一种方法能够解决我们的问题,又尽量减少出错,减少 计算量就是符合这个问题的好方法。

良好的编程习惯有助于检查错误,也可以增强程序的可阅读性。