最新雅克比迭代法……

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验课程名称:数值分析

}

结果:

流程图:

②Gauss-Seidel迭代法

#include

int main()

{

double x[3] = {0, 0, 0};

开始

阶数n,系数矩

阵,初始向量

for(i=0;i

i=j

Y

N

total += a[i][j] *

x[j]

e = e +

ABS(x[j],

结束

double a[3][3] = {6,2,-1,1,4,-2,-3,1,4}; double y[3] = {-3,2,4};

double d[3][3],g[3];

int round = 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");

}

}

结果:

流程图:

{ a[i]=(float *)malloc(n*sizeof(float)); } return a;

}

float matrix_category(float* x,int n)

{ int i; float temp=0; for(i=0;i

{ temp=temp+fabs(x[i]); }

return temp;

}

结果:

流程图:

return 0; }

结果:

流程图:

⑤欧拉显式方法

#include

#include

#include

double f(double x,double y) {

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

}

int main()

{

int i;

开始

矩阵阶数系数矩阵

for(k=1;k<=i-1;k++)

m=m+a[i][k]*a[k][j];

a[i][j]= a[i][j]-m;

a[k][num+1]=(a[k][

num+1]-q)/a[k][k]

结束

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)

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

#define f(x,y)(x+y)

int main()

{int m;

int i;

double a,b,y0;

double xn,yn,xn1,yn1,yn1b;

double h;

printf("\nInput the begin and end of x:");

scanf("%lf%lf",&a,&b);

printf("Input the y value at %f:",a);

scanf("%lf",&y0);

printf("Input m value[divide(%f,%f)]:",a,b);

scanf("%d",&m);

if(m<=0)

{printf("Please input a number larger than 1.\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迭代法的基础上,应用加速收敛思想而构造的一种方法;欧拉公式和梯形公式在计算上有明显的区别,

欧拉公式的特点是可以有U

N 直接计算U

n+1

,也就是显式的,而梯形公式右端也有U

n+1

,必须通过解

方程才能求得,这类是隐式的。从算法的角度看显式远比隐式方便,隐式通常用迭代法求解。

三、实验小节、建议及体会

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

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

信息技术在教学中的应用和反思

通过的近期信息技术提升培的学习,结合教学教学中相关信息

相关文档
最新文档