实验四 常微分方程初值问题数值解法

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

佛山科学技术学院

实 验 报 告

课程名称 数值分析

实验项目 常微分方程初值问题数值解法 专业班级 12.数学与应用数学(师范) 姓名 叶楚欣 学号 2012214103 指导教师 黄国顺 成 绩 日 期

一. 实验目的

1、理解如何在计算机上实现用Euler 法、改进Euler 法、Runge -Kutta 算法求一阶常微分方程初值问题

⎩⎨

⎧=∈='1

)(]

,[),,()(y a y b a x y x f x y 的数值解。

2、利用图形直观分析近似解和准确解之间的误差。

3、学会Matlab 提供的ode45函数求解微分方程初值问题。

二、实验要求

(1) 按照题目要求完成实验内容; (2) 写出相应的Matlab 程序;

(3) 给出实验结果(可以用表格展示实验结果); (4) 分析和讨论实验结果并提出可能的优化实验。 (5) 写出实验报告。 三、实验步骤

1、用编好的Euler 法、改进Euler 法计算书本P167 的例1、P171例题3。 (1)取0.1h =,求解初值问题

⎪⎩

⎧=∈-='

1)0(],1,0[,2)(y x y x y x y (2)取0.1h =,求解初值问题

⎩⎨

⎧=∈++-='1

)0(],

5.0,0[,1)(y x x y x y 2、用Runge -Kutta 算法计算P178例题、P285实验任务(2) (1)取0.1h =,求解初值问题

⎧=∈='1)0(],

5.0,0[,)(2y x y x y (2)求初值问题

⎪⎩⎪⎨

⎧=∈-++-='0

)0(],

5.0,0[),14(21)(2

y x x x y x y 的解)(x y 在)05.0(==h ih x i 处的近似值i y ,并与问题的解析解1

)(22

-+=-

x e x y x

相比较。

3、用Matlab 绘图函数plot(x,y)绘制P285实验任务(2)的精确解和近似解的图形。

4、使用matlab 中的ode45求解P285实验任务(2),并绘图。

四、实验结果

1、Euler 算法程序、改进Euler 算法程序;

2、用Euler 算法程序、改进Euler 算法求解P167例题1的运行结果;

3、Runge -Kutta 算法程序;

4、用Runge -Kutta 算法求解P178例题、P285实验任务(2),计算结果如下(其中i y 表示数值解,)(i x y 表示解析解,结果保留八位有效数字):

5、P285实验任务(2)精确解与近似解的图形比较 (

贴到此处)

00.0

50.10.1

50.20.250.30.350.40.45

0.5-

-----000

6、用matlab 中的ode45求解P285实验任务(2)

MATLAB desktop keyboard shortcuts, such as Ctrl+S, are now customizable. In addition, many keyboard shortcuts have changed for improved consistency across the desktop.

To customize keyboard shortcuts, use Preferences. From there, you can also restore previous default settings by selecting "R2009a Windows Default Set" from the active settings drop-down list. For more information, see Help.

Click here if you do not want to see this message again.

>> ydot_fun=inline('y-2*x./y','x','y');

>> [x,y]=euler_f(ydot_fun,0,1,0.1,10)

x =

Columns 1 through 4

0 0.100000000000000 0.200000000000000 0.300000000000000

Columns 5 through 8

0.400000000000000 0.500000000000000 0.600000000000000 0.700000000000000

Columns 9 through 11

0.800000000000000 0.900000000000000 1.000000000000000

y =

Columns 1 through 4

1.000000000000000 1.100000000000000 1.191818181818182 1.277437833714722

Columns 5 through 8

1.358212599560289 1.435132918657796 1.508966253566332 1.580338237655217

Columns 9 through 11

1.649783431047711 1.717779347860087 1.784770832497982

>> ydot_fun=inline('y-2*x./y','x','y');

>> [x,y]=euler_r(ydot_fun,0,1,0.1,10)

x =

Columns 1 through 4

0 0.100000000000000 0.200000000000000 0.300000000000000

Columns 5 through 8

0.400000000000000 0.500000000000000 0.600000000000000 0.700000000000000

Columns 9 through 11

0.800000000000000 0.900000000000000 1.000000000000000

y =

Columns 1 through 4

1.000000000000000 1.095909090909091 1.184096569242997

相关文档
最新文档