从系列中:在MATLAB中求解ODEs
克利夫莫勒,数学工程
ODE1实现了Euler方法。它介绍了ODEs的数值方法和ODE求解器的MATLAB套件。以指数增长和复利为例。
你好。我是克利夫莫勒,数学工厂的创始人和首席数学家之一。这一系列视频是关于在MATLAB中求解常微分方程的。我们可以先回顾一下导数的定义。函数在某一点上的导数是该点上函数图的切线的斜率。
我们的数值近似将依赖于图的割线斜率。这是一条穿过两点的线,中间有一个距离h。我们在继续的时候,会有很多关于步长h的讨论。重要的是要认识到,当h为0时,割线的斜率接近切线的斜率。
wiggly等号表示近似等于。t0是我们找到近似值的点。在t0处导数的值大约等于割线的斜率。割线的斜率是y值相对于t值的变化。y值的变化是y的两个值之间的差异。t值的变化是步长h。
如果我们重写它,我们得到t0点y的值加上h,大约等于t0点y的值加上h乘以t0点y素数的值。这是我们第一个数值方法,欧拉方法的基础。
欧拉是18世纪瑞士数学家,可能是他那个时代最有影响力的数学家。他在数学、物理学和天文学的广泛领域作出了重要贡献。例如,他发明了函数的概念。
这个微分方程是由两个变量t和y的函数f给出的,一般来说,任务是找到一个导数等于f的函数y。现在,有很多函数y的导数等于f。所以,如果有一个初始条件,一个点t零,或t0,和一个值y0,初始条件是y在t0应该等于y0。
这里有一些例子。复利率问题就是利率乘以y,这里t和y的函数实际上并不依赖于t,它在y中是线性的,初始条件是在时间0。有一个指定的y值,比如100美元。这就是复利问题。
这是logistic方程。非线性方程,这里t和y的f又不依赖于t,它是一个常数乘以y减去另一个常数乘以y的平方。这是逻辑方程。同样,该值指定为0。假设0处的y等于1。
这是另一个非线性方程。t和y的f是t平方加y平方。找不到这个方程的解析解。我们将使用这些数值方法来找到这个方程的一些解。初始条件,y等于0。这是t和y函数的一个例子。
一般来说,欧拉方法实际上不是一种实用的数值方法。我们只是用它来让我们开始思考数值方法的基本思想。Euler方法包含一系列点t子n,用固定步长h隔开,然后y子n是t子n处解的近似值。
近似值来自割线的斜率,y值和步长h之差的比值。微分方程说这个比值应该是t次n处的函数值。如果我们重新排列这个方程,我们得到欧拉方法,y n+1是yn+h乘以在d subn和y subn处计算的函数f。这是欧拉方法。
我们现在准备好了第一个MATLAB程序ODE1。它之所以被称为ODE1,是因为它是我们的第一个程序,也是因为它每一步计算定义微分方程的函数f。有五个输入参数。第一个是f,一个定义微分方程的函数。这就是所谓的匿名函数。我一会儿再谈。
其他四个是标量数值。前三个定义了集成的间隔。我们从0开始,按h到t的步骤。第五个输入参数是y0,初始值。输出是一个向量。向量yout是解在区间点上的值。
我们首先将初始值y0放入y,然后将y放入输出向量。函数的主体是for循环。t从t0开始,以h为步,一直到距t final一步,然后通过代码体的最后一段需要t到tfinal。
我们计算t和y的函数f,得到斜率s,s表示斜率。这是欧拉的步骤。取y的当前值,将h乘以斜率。这给了我们一个新的y值,然后y被加到你的后面。这个带方括号的MATLAB构造需要一个向量y,再加上一个值,使它变长一个元素,然后将结果放回yout中。这是全部代码。就这样。这是实现Euler方法的ODE1。
任何MATLAB ODE解算器的第一个参数都是指定微分方程的函数名。这称为函数句柄。获取函数句柄的最简单方法是使用使用与号或at符号创建的匿名函数。所有的微分方程都包含两个变量t和y的匿名函数,所以在括号t逗号y闭括号处有f等于。接下来是任何涉及t或y的表达式,其中许多并不依赖于t。
这里有一个匿名函数来定义我们的兴趣问题。我们可以像任何普通函数一样计算它。当y等于1时,1的f为0.06。下面是一个依赖于t和y的函数的例子。这些函数可以包含有值的常量。所以这里我们可以定义两个常数。然后我们可以用这两个常数来定义logistic方程,a乘以y减去b乘以y的平方。同样,这是一个自治方程,实际上并不依赖于t。
让我们看看Euler方法和ODE1如何处理这个简单的例子,y素数等于2y,初始条件y为0等于10,间隔t在0和3之间。我们定义了一个匿名函数,t和y的f等于2y,初始条件是t0等于0。我们将采用1的步长。从y0等于10开始,到t最终等于3。这是我们给ODE1的电话。
我们有一个动画显示这些步骤。从t0等于0,y0等于10开始。这是我们的第一点。我们评估那里的功能。我们得到20的斜率。是2乘以10。我们在第一步上做一个长度为1的欧拉步。我们到了第二个,0.30。评估那里的功能。2乘30等于60。那是我们的斜坡。
走第二步到y2。y2是90。评估那里的功能。得到2乘以90等于180。这给了我们斜坡。用那个坡度跨一步到第三个点。第三点是270。这就是整合的终点。这是从t0到tfinal的三个Euler步骤。
欧拉方法实际上和计算复利是一样的。所以让我们做一个复利问题。定义利率。使用该利率定义我们的匿名函数。从时间0开始。一个月一步走。去10年。从100美元开始。这是我们用ODE1计算复利的结果。一共121个号码。
MATLAB实际上有一个查看美元和美分的格式。所以在这里他们是美元和美分。从100美元开始,每个月复利,我们只得到超过180美元。我来策划一下。所以我想要一个月的时间向量。
我真的想和简单的兴趣比较一下。所以这里是你计算简单利息的方法,每月0.50美元。现在让我们把这两个画出来。所以直线就是简单的利息,最高160美元。蓝线是复利。有一个轻微的向上弯曲,让我们涨到180美元。这里每个月都有一个点,就像我们展示的,欧拉方法的结果,就像我说的,这和计算复利是一样的。
最后,这里有一个练习。找到产生线性增长的微分方程。使用ODE1重新运行这个例子两次,一次计算复利,一次计算单利。
也可以从以下列表中选择网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家/地区网站未针对您所在位置的访问进行优化。