从系列中:用MATLAB求解ode
Cleve Moler, MathWorks
ODE1实现了欧拉方法。它介绍了ODE的数值方法和ODE求解器的MATLAB套件。以指数增长和复利为例。
你好。我是Cleve Moler, the MathWorks的创始人和首席数学家之一。本系列视频讲的是用MATLAB解常微分方程。我们可以从导数的定义开始。函数在一点处的导数就是该点处的切线的斜率。
我们的数值近似将依赖于图像的割线斜率。这是一条经过两点的直线,中间间隔是h,我们会讲到很多关于步长h的内容。重要的是,当h趋于0时,sec的斜率趋近于tan的斜率。
摆动等号表示近似等于。T0是我们求近似值的点。导数在t0处的值近似等于sec的斜率。sec的斜率等于y值的变化量除以t值的变化量。y值的变化量是y的两个值之差。t值的变化量是步长h。
重写一下,得到y在t0 + h处的值近似等于y在t0处的值加上h乘以y '在t0处的值。这是我们第一个数值方法,欧拉方法的基础。
莱昂哈德·欧拉是18世纪的瑞士数学家,可能是他那个时代最有影响力的数学家。他在数学、物理学和天文学等广泛领域做出了重要贡献。例如,他发明了函数的概念。
微分方程是由函数f(两个变量t和y)给出的,任务,一般来说,是找到一个函数y,它的导数等于f,现在,有很多函数y的导数等于f,所以有一个初始条件,一个点t0,或者t0,和一个值y0,初始条件是y在t0处应该等于y0。
这里有一些例子。复利问题就是利率乘以y,这里t和y的函数不依赖于t,它与y是线性的,初始条件是时刻0。有一个特定的y值,比如100美元。这就是复利问题。
这是逻辑方程。非线性方程,这里f (t, y)不依赖于t,它是一个常数乘以y减去另一个常数乘以y²。这就是逻辑方程。同样,该值指定为0。假设y(0) = 1。
这是另一个非线性方程。F (t, y)等于t方+ y方。不可能找到这个方程的解析解。我们用这些数值方法来求这个方程的解。初始条件,y(0) = 0。这是一个关于t和y的函数的例子。
欧拉方法实际上不是一个实用的数值方法。我们只是用它来开始思考数值方法的基本思想。欧拉方法包含一系列的点(tn),它们之间间隔一个固定的步长为h, y下标n是在tn处解的近似值。
近似值来自于割线的斜率,y和步长h的差值之比,微分方程表明这个比值应该是函数在tn处的值,如果我们重新排列这个方程,我们得到欧拉法,yn + 1等于yn + h乘以函数f在dn和yn处的值,这是欧拉法。
现在我们准备好了我们的第一个MATLAB程序,ODE1。它被称为ODE1,因为它是我们的第一个程序,因为它每一步求一次定义微分方程的函数f。有五个输入参数。第一个是f,一个定义微分方程的函数。这叫做匿名函数。我稍后会详细讨论这个问题。
其他四个是标量数值。前三个定义了积分区间。从t0到tfinal的单位是h。第五个输入参数是初始值y0。输出是一个向量。向量yout是解在区间内各点上的值。
首先把初始值y0代入y,然后把y代入输出向量。函数体是一个for循环。T从t0开始,以h为单位,直到距离tfinal差一步,然后在代码体的最后一段中,T一直到tfinal。
求函数f在t和y处的值,得到斜率s, s是斜率。这是欧拉步骤。取y的当前值,加上h乘以斜率。这就得到了y的新值,然后y被加到yout上。这个带有方括号的MATLAB结构取一个向量y,给它加上另一个值,使它变长一个元素,并将结果放回yout中。这是整个代码。就是它了。这是ODE1它实现了欧拉方法。
任何MATLAB ODE求解器的第一个参数都是指定微分方程的函数的名称。这被称为函数句柄。获得函数句柄的最简单方法是使用带有&号或@号的匿名函数。所有的微分方程都包含两个变量t和y的匿名函数,所以我们有f = (t, y)(闭括号)它后面跟着任何涉及t或y的表达式,其中许多表达式不依赖于t。
这是一个匿名函数定义了利息问题。我们可以像其他函数一样求值。当y = 1时,f(1) = 0.06。这里有一个函数的例子,它依赖于t和y。这个函数可以包含有值的常数。这里我们可以定义两个常数。然后我们可以用这两个常数来定义逻辑方程,f (a * y - b * y²)这是一个自主方程,不依赖于t。
让我们看看欧拉方法和ODE1在这个简单的例子中是如何工作的,y ' = 2y初始条件y(0) = 10在区间t(0到3)上。我们定义匿名函数,f (t, y) = 2y。初始条件是t0 = 0。步长是1。到tfinal = 3,从y0 = 10开始。这是我们对ODE1的调用。
我们有一个动画来展示这些步骤。从t0 = 0和y0 = 10开始。这是我们的第一点。我们求函数的值。斜率是20。就是2乘以10。在第一步中取长度为1的欧拉步。这就引出了第二个,0.30。求函数的值。2乘以30等于60。 That's our slope.
第二步得到y2。y是90。求函数的值。得到2乘以90等于180。这就得到了斜率。在这个斜率区间内求一步,得到第三个点。第三点是270。这就是积分的结束。从t0到tfinal有三个欧拉步骤。
欧拉方法实际上和计算复利是一样的。我们来做一个复利问题。定义利率。使用该利率定义匿名函数。从时间0开始。以一个月为单位。坚持10年。从100美元开始。这是我们用ODE1计算复利的结果。一共是121个数。
MATLAB实际上有一个计算美元和美分的格式。这里是美元和美分。从100美元开始,每个月按复利计算,我们会得到180美元多一点。我要把它画出来。我想要一个月为单位的时间向量。
实际上我想把它和单利进行比较。这就是单利的计算方法,每月0.5美元。现在我们把这两个画出来。直线是单利,一直到160美元。蓝线是复利。有一个轻微的向上弯曲,使我们达到180美元。这里每个月都有一个点,这是欧拉方法的结果,我说过,欧拉方法和计算复利是一样的。
最后,做个练习。找出产生线性增长的微分方程。使用ODE1重新运行此示例两次,一次计算复利,一次计算单利。
您也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。
本网站使用cookie来改善您的用户体验、个性化内容和广告以及分析网站流量。如果您继续使用本网站,即表示您同意我们使用cookie。请参阅我们的隐私政策了解更多关于cookie和如何更改您的设置。