2013《常微分方程课程设计》指导书 1-2

更新时间:2023-09-26 08:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章 引 言

1.1 课程设计的意义

高等学校的实践教学一般包括课程实验、综合性设计(课程设计)、课外科技活动、社会实践、毕业设计等,基本上可以分为三个层次:

第一,紧扣课堂教学内容,以掌握和巩固课程教学内容为主的课程实验和综合性设计; 第二,以社会体验和科学研究体验为主的社会实践和课外科技活动; 第三,以综合应用专业知识和全面检验专业知识应用能力的毕业设计。

课程实践(含课程实验和课程设计)是大学教育中最重要也最基础的实践环节,直接影响后继课程的学习以及后继实践的质量。由于课程设计是以培养学生的系统设计与分析能力为目标,通过团队式合作、研究式分析、工程化设计完成较大型系统或软件的设计题目的,因此课程设计不仅有利于学生巩固、提高和融合所学的专业课程知识,更重的是能够培养学生多方面的能力,如综合设计能力、动手能力、文献检索能力、团队合作能力、工程化能力、研究性学习能力、创新能力等。

《常微分方程课程设计》(Curriculum Design of the Ordinary Differential Equations)是一门继《数学实验》和《常微分方程》(ODE)之后开设的实验性课程,主要是指导性的讲解方程求解的数值方法和软件编程(如MATLAB,MATHMATIC,FORTRAN等)并实现方程的解析解与数值解可视化分析的一个集中实践教学环节。其宗旨在于培养学生运用计算机分析求解方程的能力,了解通过数学模型去解决实际问题的全过程,提高常微分方程课堂教学后的理解和应用效果,同时激发和提高同学们对于具有工程背景的科学研究的热情。

课程设计不仅仅是以实现相应的程序为目标,更重要的是在完成课程设计的过程中逐步培养今后遇到问题而去解决问题的能力,培养从事计算机应用开发所需要的各种能力与素质。因此,在课程设计实施中,不仅需要完成程序并进行测试,还需要撰写相应的课程设计报告。课程设计报告不仅是对课程设计的总结,也是对软件文档写作能力的初步训练。

1.2 课程设计的主要内容和方法

常微分方程是现代数学的一个重要分支,是人们解决各种实际问题的有效工具,它在几何、力学、物理、电子技术、自动控制、航天、生命科学、经济等领域都有着广泛的应用。这些应用也为微分方程的进一步发展提出了新的问题,促使人们对微分方程进行更深入的研究,以便适应科学技术飞速发展的需要。

微分方程的首要问题是如何求一个给定方程的同解或特解。到目前为止,人们已经对许多微分方程得出了求解的初等积分方法。

例如一阶常系数微分方程dydt?y?1可化为dy(y?1)?dt,两边积分可得通解为

y?cet?1,其中c为任意常数。

有些常微分方程可用一些技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解(显式解)。另外,线性常微分方程的解满足叠加原理,从而其求解可归结为求一个特解和相应齐次微分方程的通解。一阶变系数线性微分方程总可用这

1

一思路求得显式解。高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变异法求特解。一阶常微分方程与高阶微分方程可以互化,所以一阶微分方程组与高阶常微分方程的理论与方法在许多方面是相通的,一阶常系数线性微分方程组也可用特征根法求解。

如给一个n阶方程

设y1?y,y2?y',?,yn?y反过来,在许多情况下,一阶微分方程组也可化为高阶方程。

但是我们必须认识到,可以求得解析解的常微分方程只是很少的一部分,除常系数线性微分方程可用特征根法求解,少数特殊方程可用初等积分法求解外,大部分微分方程是无法

sinx的解无法用初等函数来表示,而Besselx2222方程xy''?xy'?(x?n)y?0和Riccati方程y'?P(x)y?Q(x)y?R(x)一般就无法用

得到显示的解析解的。比如简单的方程y'?初等积分法求出通解。

因此在实际应用中,人们开始研究某种定解条件下的特解,如研究初值问题的解的性态,引入特殊函数表达解等。同时,随着计算机技术的发展,用近似方法来求微分方程的特解而成为应用中的主流解法,即依靠一些数值解法来处理复杂多样的常微分方程解的问题。

比如考虑一阶常微分方程初值问题

这也是一个科学与工程计算经常遇到的问题,由于只有很特殊的方程能用解析方法求解,而用计算机求解常微分方程的初值问题都要采用数值方法。通常我们假定(1.1)中f(x,y)对y满足Lipschitz条件,即存在常数L?0,使对?y1,y2?R有

则初值问题(1.1)的解存在且唯一。

假定(1.1)的精确解为y(x),求它的数值解就是要在区间[a,b]上的一组离散点

a?x0?x1???b上求y(x)的近似值y0,y1,?,yn?。通常取xn?a?nh(n?0,1,?),

y(n)?f(t,y',y\,?,y(n?1))

(n?1),可将上式化为一阶方程组

?y1'?y2?y'?y23?? ???y'?yn?n?1??yn'?f(t,y1,y2,?,yn)?y'?f(x,y),a?x?b (1.2.1) ?y(a)?y0?|f(x,y1)?f(x,y2)|?L|y1?y2| (1.2.2)

h称为步长,求(1.1)的数值解是按节点xi(i?1,2,?)的顺序逐步推进求得y1,y2,?。首先,

要对方程做离散逼近,求出数值解的公式,再研究公式的局部截断误差,计算稳定性以及数

值解的收敛性与整体误差等问题。最简单的数值解法是Euler法。

Euler方法只有一阶精度,改进方法有二阶Runge-Kutta法、四阶Runge-Kutta法、五阶Runge-Kutta-Felhberg法和线性多步法等等,这些方法可用于解高阶常微分方程(组)初值问题。边值问题采用不同方法,如差分法、有限元法等。当然,数值算法也存在一个主要缺点,那就是数值解缺乏实际物理理解。

综述起来,《常微分方程课程设计》的主要内容就是针对实际中提炼出的常微分方程(组)初值问题,运用计算机实现各类方程(组)的数值求解。其讨论的主要方法有:一是常微分方程的单步法,主要包括Euler法、Runge-Kutta方法,如普通Euler法,后退Euler法、梯形法以及改进的Euler法,各级Runge-Kutta方法的导出和应用分析,比较各自优点和适应范围。二是线性多步法,其中包括线性多步法的一般公式,Adams显式与隐式方法,Adams预测-校正方法,Milne方法与 Hamming方法等等。最后,讨论一阶方程组与高阶方程数值

2

方法。

1.3 课程设计报告撰写基本要求

课程设计报告书写要规范,报告的开头应给出题目、专业、班级、姓名、学号、完成日期,并包括以下内容:

1.问题背景以及问题要求陈述 清楚陈述练习题的问题背景,问题所要求做的程序设计的任务,明确问题将要达到的目的或结果;

2.问题分析

结合所学知识能具体分析问题的重点,所涉及的知识点或性质要有概括性的分析; 3.程序书写

要求程序能顺利实现并解决问题,加上必要的注释,MATLAB语言优化,增强程序的可读性,可编多个程序。对于有些习题的完成没有具体的程序列出,也请按操作顺序予以描述。

4.调试和结果

对程序或操作能给出调试分析过程,最终给出程序结果,该结果应该就是问题的解决结果。

5.总结或拓展

简单总结解决问题所遇到的难点以及解决难点的方法,指出适当拓展的可能性,也可补充一些新观点。

6.参考文献

报告书中可能遇到查询资料来完善内容,所涉及到的文献资料必须在文本最后以统一格式编写出来。这也是学做科研的一种必要的训练。

1.4 课程设计的组织与评分方法

同学们通过了解并掌握本课程设计的基础知识,并在熟悉软件环境后,通过编程实现六大块的典型模型。每一块学完之后要求同学们自选题目,独立完成编写代码,测试,并撰写课程设计报告。

课程设计的考核方法为:采用每章课程设计报告的百分制打分,成绩按六章内容总成绩取平均,最终折合为五级记分制:优、良、中、及格、不及格。

每个报告的发布或上交都有明确的截止日期,对于超过截止日期的提交,将会酌情扣分。

3

第2章 MATLAB求解常微分方程

本章重点在于介绍求解常微分方程的MATLAB命令的用法,一是常微分方程(组)的解析解的命令编辑和分析,二是常微分方程(组)的数值解的命令介绍和应用。我们面对的读者应该是已经熟悉了MATLAB的基本用法以及微分方程的基本内容。如果读者对所提的基本知识上不够熟悉,则可以参考本书提供的参考文献,学习一些有关的知识,这是应该做的也是十分必要的。

这里所介绍的程序均以MATLAB6.5或7.0的版本为准,不过,这些程序基本上都能在MATLAB6.0以上的版本中运行。

2.1 常微分方程解析解求法

对于常微分方程的求解问题,这是常微分方程教材的重点甚至是全部,目的就是得到方程的精确解的表达式,也称为解析解,还称为常微分方程的符号解。在MATLAB中,由函数dsolve( )来解决常微分方程(组)的求解问题,从而得到方程的解析解。

其具体格式如下:

r = dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v') (2.1.1) 其中,'eq1,eq2,...'为微分方程或微分方程组,'cond1,cond2,...' 是初始条件或边界条件,'v'是独立变量,默认的独立变量是't'。

值得注意的是,函数dsolve用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解。 这个函数就涵盖了我们在微分方程教材中的各类解析解法所能解决的方程的求解问题。

例1求解常微分方程

dy1? 的MATLAB程序为 dxx?y>> dsolve('Dy=1/(x+y)','x') % 回车即输出结果 ans =

-lambertw(-C1*exp(-x-1))-x-1

注意,系统缺省的自变量为 't' ,因此这里需把自变量写明。 其中:Y=lambertw(X)表示函数关系Y*exp(Y)=X。而该问题的解析解法为:一是把方程变形为dxdy?x?y,按一阶线性方程的解法直接得到通解x?C1e?y?1;二是可以通过变量代换x?y?u,再分离变量法也可得通解x?C1e?y?1。这个解跟MATLAB求得的符号解是一样的。

例 2 求解常微分方程yy''?y'?0的MATLAB程序为

>> Y2=dsolve('D2y*y-Dy^2=0','x') % 回车即输出结果

Y2 =

4

2yy 0 exp(C1*x)*C2

我们看到有两个解,其中一个是常数0。自己可以调试为什么不写成下面形式 >> Y2=dsolve('y*D2y-Dy^2=0','x')

例 3 求常微分方程组

?dx??5x?y?et??dt ? (2.1.2)

?dy?x?3y?e2t??dt的通解的MATLAB程序为

>> [X,Y]=dsolve('Dx=-5*x-y+exp(t),Dy=x+3*y+exp(2*t)','t')

解析解结果为 X =

exp((-1+15^(1/2))*t)*C2+exp(-(1+15^(1/2))*t)*C1+1/6*exp(2*t)+2/11*exp(t) Y =

-4*exp((-1+15^(1/2))*t)*C2-exp((-1+15^(1/2))*t)*C2*15^(1/2)-4*exp(-(1+15^(1/2))*t)*C1+exp(-(1+15^(1/2))*t)*C1*15^(1/2)-7/6*exp(2*t)-1/11*exp(t)

例 4 求常微分方程组

dy?dx?2x??10cost,??dtdt??dx?dy?2y?4e?2t,??dtdtx|t?0?2 (2.1.3)

y|t?0?0的通解的MATLAB程序为

>>[X,Y]=dsolve('Dx+2*x-Dy=10*cos(t),Dx+Dy+2*y=4*exp(-2*t)','x(0)=2,y(0)=0','t')

解析解结果为 X =

-2*exp(-t)*sin(t)+4*cos(t)+3*sin(t)-2*exp(-2*t) Y =

2*exp(-t)*cos(t)+sin(t)-2*cos(t)

2.2 常微分方程数值解求法

上一节的方程求解都是常微分方程的精确解法。但是,我们知道,有大量的常微分方

5

本文来源:https://www.bwwdw.com/article/2zqd.html

Top