从系列:在MATLAB中求解ode
克里夫·莫勒尔,MathWorks公司
ODE1实现了欧拉方法。它介绍了ODE的数值方法和ODE求解程序的MATLAB套件。以指数增长和复利为例。
你好。我是Cleve Moler, MathWorks的创始人和首席数学家之一。这一系列视频是关于在MATLAB中求解常微分方程的。我们可以先回顾一下导数的定义。函数在某一点的导数是该点处切线到函数图像的斜率。
我们的数值近似值依赖于曲线的sec的斜率。这是一条通过两点的直线,两点之间的距离是h,我们会讲到很多关于步长h的内容。重要的是,当h趋于0时,sec的斜率接近于tan的斜率。
该蠕动等号手段近似等于。T0是我们正在寻找的近似点。在t0的导数的值是大约等于割线的斜率。割线的斜率是在超过在t值的变化的y值的变化。在y值的变化是y的两个值之间的差。在t值的变化是步长小时。
如果我们重写一下,我们得到y在t0 + h处的值近似等于y在t0处的值加上h乘以y '在t0处的值。这是我们第一个数值方法的基础,欧拉法。
欧拉是18世纪瑞士数学家,也许他那个时代最有影响的数学家。他做了一个广泛的数学,物理和天文学领域的重要贡献。他发明的功能的概念,例如。
微分方程是由这两个变量的函数f t y。和任务,一般来说,是要找到一个导数的函数y = f。现在,有很多导数的函数y = f。那里有一个初始条件,to,或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的函数。
欧拉的方法实际上是不实际的数值计算方法,在一般。我们只是用它来让我们开始考虑基本数值方法的思路。欧拉方法涉及点吨子n中的序列,是由固定步长h分离。然后Y副n是近似在t子n中的溶液的值。
近似来自割线的斜率,y的值之差的比值和步长h。微分方程说,这个比例应该的价值函数t下标n。如果我们重新安排这个方程,我们得到欧拉方法,yn + 1 = yn + h乘以评估函数f d an和y下标n。这是欧拉方法。
现在我们准备好了第一个MATLAB程序,ODE1。它叫ODE1,因为这是我们的第一个程序,因为它对函数f求值,函数f每一步定义一次微分方程。有五个输入参数。第一个是f,一个定义微分方程的函数。这就是所谓的匿名函数。我一会儿会详细讲这个。
其他四个是标量数值。前三个定义了积分区间。从t0到tfinal。第五个输入参数是y0,即初始值。输出是一个向量。向量yout是在区间内各点的解的值。
我们通过把Y0,初始值,为y,然后把Y考虑输出向量开始。函数的主体是一个for循环。吨从t0变为在H高达步骤的T最终一步短,然后通过代码的主体中的最后通道需要吨到T最终。
我们对函数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。这是我们的斜率。
第二步得到y2。y2是90。求这个函数的值。得到2乘以90等于180。这就是斜率。在这个区间上移动一步得到第三个点。第三点是270。这就是积分的结果。从t0到tfinal需要三个欧拉步骤。
欧拉的方法实际上是一样的计算复利。因此,让我们做一个复利问题。定义利率。使用利率定义我们的匿名函数。开始时0时间走了一个月的步骤。走了10年。开始与100 $。下面是使用ODE1计算复利我们的结果。这是121号。
MATLAB实际上有一个计算美元和美分的格式。这里是美元和美分。从100美元开始,每个月计算复利,我们得到180美元多一点。我把它画出来。所以我想要一个月的时间向量。
实际上我想将它用简单的利益进行比较。因此,这里是你如何计算单利,每月$ 0.50。然后现在我们绘制这两个。因此,直线是单利,获得高达$ 160而蓝线是复利。有一个轻微向上弯曲,让我们上至$ 180美元。有一个点,每月在这里,为大家展示欧拉的方法,其中,正如我所说的,是同样的事情,计算复利的结果。
最后,做个练习。求出线性增长的微分方程。然后使用ODE1重新运行这个例子两次,一次计算复利,一次计算单利。