你好。我是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处的值。这是我们第一个数值方法——欧拉法的基础。
莱昂哈德·欧拉(Leonhard Euler)是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的函数的例子。
一般来说,欧拉方法实际上并不是一种实用的数值方法。我们只是用它来让我们开始思考数值方法背后的思想。欧拉的方法包含了一系列的点(t下标n),被固定的步长h隔开,然后y下标n是在t下标n处解的近似值。
近似来自于sec的斜率,即y和步长h的差之比,微分方程说这个比值应该是函数在t下标n处的值,如果我们重新排列这个方程,我们得到欧拉法,yn + 1等于yn + h乘以函数f在d下标n和y下标n处的值,这就是欧拉法。
我们现在准备好了我们的第一个MATLAB程序,ODE1。之所以叫ODE1,是因为它是我们的第一个程序,因为它每一步计算一次定义微分方程的函数f。有5个输入参数。第一个是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 = at括号(t, y)闭括号。后面是任何涉及到t或y的表达式,其中很多都不依赖于t。
这是一个匿名函数定义了我们的兴趣问题。我们可以像计算普通函数一样计算它。当y = 1时,f(1) = 0.06。这里有一个函数的例子,它同时依赖于t和y,函数可以包含有值的常数。所以在这里我们可以定义两个常数。然后我们可以用这两个常数来定义逻辑方程,f (a * y - b * y ^ 2)再说一次,这是一个不依赖于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。y2是90。求这个函数的值。得到2 * 90 = 180。这就得到了斜率。沿着这个斜率的区间走一步,得到第三个点。第三点是270度。积分到这里就结束了。所以从t0到tfinal是三个欧拉步骤。
欧拉的方法其实和计算复利是一样的。那么我们来做一个复利问题。定义利率。用这个利率定义匿名函数。从时间0开始。以一个月为单位。坚持10年。从100美元开始。这是我们用ODE1计算复利的结果。, 121年的数字。
MATLAB实际上有一个查看美元和美分的格式。所以在这里它们是美元和美分。从100美元开始,每个月复利,到180美元多一点。我要把它画出来。我想要一个月的时间向量。
而且我其实想和单纯的兴趣做个比较。这是计算单利的方法,每月0.5美元。然后我们画出这两项。直线是单利,到160美元。蓝线是复利。有一个轻微的向上弯曲,使我们上升到180美元。这里每个月都有一个点,我们展示的是欧拉方法的结果,我说过,这和计算复利是一样的。
最后,来做个练习。找到产生线性增长的微分方程。并使用ODE1重新运行这个例子两次,一次计算复利,一次计算单利。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文),获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。