常微分方程数值解法课程设计报告

发布 2019-07-18 17:54:57 阅读 1662

数值分析课程设计。

题目:常微分方程的数值解法。

组员:邓全飞 201120320105

许曦 201120320108

熊鲁平 201120320203

余佳明 201120320206

专业:信息与计算科学

指导老师:刘唐伟

一、摘要 3

二、设计目的 3

三、理论基础 3

1.欧拉公式【3】 3

2.改进euler方法【3】 3

3.三阶龙格-库塔方法【3】 3

4.四阶龙格-库塔方法【3】 4

四、程序**及运算结果 4

1、用欧拉法求解 5

2、用改进欧拉法求解: 6

3、用3阶龙格—库塔求解 7

4、 用4阶龙格—库塔求解 9

6、欧拉方法与改进欧拉方法、3阶龙格-库塔法以及4阶龙格-库塔法得出的解得比较。 10

五、数值分析设计的gui界面 13

六、结果分析 14

七、设计心得 14

八、参考文献 14

一、摘要。在matlab环境下熟悉的运用计算机编程语言并结合龙格-库塔法的理论基础对常微分方程初值问题进行求解,在运行完程序后以及对运行结果做出各方面的分析和比较。

二、设计目的。

用熟悉的计算机语言编程上机完成用欧拉方法、改进欧拉方法、3阶龙格-库塔法以及4阶龙格-库塔法求解常微分方程初值问题。

三、理论基础。

1.欧拉公式【3】

在点将作taylor展开,得。

那么当h充分小时,略去误差项,用近似替代、近似替代,并注意到,便得。

上述方法称为euler方法。

2.改进euler方法【3】

在应用梯形方法的迭代公式进行运算时,每迭代一次都要重新计算函数的值,且还要判断何时可以终止或转下一步计算。为了控制计算量和简化算法,通常只迭代一次就转入下一步计算。具体说,我们先用euler公式求得一个初步的近似值,称之为**值,然后用梯形方法的迭代公式作一次迭代得,即将校正一次,这样建立的**-校正方法称之为改进的euler方法:

**:,校正:.

3.三阶龙格-库塔方法【3】

类似前面改进的euler方法公式的推导方法,将在处作taylor展开,然后再将在处作taylor展开,只要将两个展开式前四项相同便有。于是得到三阶龙格-库塔公式为:

4.四阶龙格-库塔方法【3】

类似前面三阶龙格-库塔的推导方法,如果每步计算四次函数f(x,y)的值,完全类似的,可以导出局部截断误差为的四阶龙格-库塔公式,其公式为:

四、程序**及运算结果。

用欧拉方法、改进欧拉方法、3阶龙格-库塔法以及4阶龙格-库塔法求解常微分方程初值问题:

精确解为:y0=[ 2.0000 -1.

9802 -1.9231 -1.8349 -1.

7241 -1.6000 -1.4706 -1.

3423 -1.2195 -1.1050 -1.

0000]

精确解图形。

1、用欧拉法求解。

程序如下:建立函数文件。

function [x,y]=cwfa1(fun,x_span,y0,h)

x=x_span(1):h:x_span(2);

y(1)=y0;

for n=1:length(x)-1

y(n+1)=y(n)+h*feval(fun,x(n),y(n));

endx=x';y=y';

在matlab输入以下程序:

> clear all

> fun=inline(' y^2*x ')

> [x,y]=cwfa1(fun,[0,1],-2,0.1);

> [x,y]

> plot(x,y,'r+-'ans =

结果及其图象:

图1 欧拉法解。

2、用改进欧拉法求解:

程序如下:建立函数文件。

function [x,y]=cwfa2(fun,x_span,y0,h)

x=x_span(1):h:x_span(2);

y(1)=y0;

for n=1:length(x)-1

k1=feval(fun,x(n),y(n));

y(n+1)=y(n)+h*k1;

k2=feval(fun,x(n+1),y(n+1));

y(n+1)=y(n)+h*(k1+k2)/2;

endx=x';y=y';

在matlab输入以下程序:

> clear all

> fun=inline(' y^2*x');

> [x,y]=cwfa2(fun,[0,1],-2,0.1);

> [x,y]

> plot(x,y,'r+-'ans =

结果及其图像:

图3改进欧拉解。

3、用3阶龙格—库塔求解。

程序如下:建立函数文件。

function [x,y]=cwfa4(fun,x_span,y0,h)

x=x_span(1):h:x_span(2);

y(1)=y0;

for n=1:length(x)-1

k1=feval(fun,x(n),y(n));

k2=feval(fun,x(n)+h/2,y(n)+h/2*k1);

k3=feval(fun,x(n)+h,y(n)+h*(2*k2-k1));

y(n+1)=y(n)+h*(k1+4*k2+k3)/6;

endx=x';y=y';

在matlab输入以下程序:

clear all;

fun=inline(' y^2*x');

x,y]=cwfa4(fun,[0,1],-2 ,0.1);

x,y] plot(x,y, 'b*-'ans =

结果及图像:

图3 3阶龙格-库塔解。

4、 用4阶龙格—库塔求解。

程序如下:建立函数文件。

function [x,y]=cwfa3(fun,x_span,y0,h)

x=x_span(1):h:x_span(2);

y(1)=y0;

for n=1:length(x)-1

k1=feval(fun,x(n),y(n));

k2=feval(fun,x(n)+h/2,y(n)+h/2*k1);

k3=feval(fun,x(n)+h/2,y(n)+h/2*k2);

k4=feval(fun,x(n+1),y(n)+h*k3);

y(n+1)=y(n)+h*(k1+2*k2+2*k3+k4)/6;

endx=x';y=y';

在matlab输入以下程序:

> clear all;

> fun=inline(' y^2*x ')

> [x,y]=cwfa3(fun,[0,1],-2 ,0.1);

> [x,y]

> plot(x,y, 'b*-'ans =

结果及其图象:

图4 4阶龙格-库塔解。

6、欧拉方法与改进欧拉方法、3阶龙格-库塔法以及4阶龙格-库塔法得出的解得比较。

x=0:0.1:1;

y0=[ 2.0000 -1.9802 -1.

9231 -1.8349 -1.7241 -1.

6000 -1.4706 -1.3423 -1.

2195 -1.1050 -1.0000]

y1=[ 2.0000 -2.0000 -1.

9600 -1.8832 -1.7768 -1.

6505 -1.5143 -1.3767 -1.

2440 -1.1202 -1.0073];

y2=[ 2.0000 -1.9800 -1.

9227 -1.8345 -1.7239 -1.

6001 -1.4711 -1.3432 -1.

2208 -1.1066 -1.0018];

奥数 五年级解方程练习题

五年级。一 解方程 2 解方程 3.2x 9 23 3 5x 4 45 3x 24 5x 12 58 5x 43 x 2x 15 5 2x 3 20 3 8 x 2 18 1.5x 2x 2.8 8.4 4 x 2 7.6 2.4 5x 1.8 1.2 6.4 6.8 1.2 x 10.8 x 10...