从系列:在MATLAB中求解ode
克里夫硅藻土,MathWorks
ODE1实现了Euler方法。它提供了ODE的数值方法和ODE求解器的MATLAB套件的介绍。以指数增长和复利为例。
你好。我是克利夫·莫勒,MathWorks的创始人和首席数学家之一。这一系列视频是关于用MATLAB求解常微分方程。我们可以从导数的定义开始。函数在某一点的导数就是函数图像在该点处的切线的斜率。
我们的数值近似依赖于图形的割线的斜率。这是一条通过两个点的直线,两个点之间的距离是h,关于步长h我们有很多要讲的。重要的是,当h趋于0时,sec的斜率趋于tan的斜率。
这个曲折的等号表示近似等于。T0是求近似值的点。t0处的导数近似等于sec的斜率。割线的斜率是y的变化量除以t的变化量。y值的变化量是两个y值之差,t值的变化量是步长h。
重写一下,得到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美元。这就是复利问题。
这是logistic方程。非线性方程,这里f (t和y)不依赖于t,它是一个常数乘以y减去另一个常数乘以y²。这就是logistic方程。同样,这个值是在0处指定的。设y(0) = 1。
这是另一个非线性方程。F (t, y)等于t方加y方。要找到这个方程的解析解是不可能的。我们将用这些数值方法来求这个方程的解。初始条件,y在0处等于0。这是一个关于t和y的函数的例子。
一般来说,欧拉法并不是一种实用的数值方法。我们只是用它来开始思考数值方法背后的思想。欧拉方法包括一系列点tn,以固定的步长h分开,然后yn是解在tn处的近似值。
近似来自割线的斜率,y的值之差的比值和步长h。微分方程说,这个比例应该的价值函数t下标n。如果我们重新安排这个方程,我们得到欧拉方法,yn + 1等于yn + h乘以函数f在dn和yn处的值,这是欧拉法。
现在,我们已经为第一个MATLAB程序ODE1做好了准备。它被称为ODE1,因为它是我们的第一个程序,因为它每一步计算定义微分方程的函数f一次。有五个输入参数。第一个是f,一个定义微分方程的函数。这叫做匿名函数。我一会儿再详细讲。
其他四个是标量数值。前三个定义了积分区间。从t0到tfinal的步长是h。第五个输入参数是y0,即初始值。输出是一个向量。向量yout是解在区间内各点的值。
我们先把初值y0代入y,然后把y代入输出向量。函数体是一个for循环。T以h为步数从t0到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,函数可以包含有值的常数。这里我们可以定义两个常数。然后我们可以用这两个常数来定义logistic方程,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。y2是90。对函数求值。得到2乘以90等于180。这就得到了斜率。在这个斜率的区间上走一步,得到第三个点。第三点是270。积分就到这里了。从t0到tfinal有三个欧拉步骤。
欧拉法实际上和计算复利是一样的。我们来做一个复利问题。定义利率。用这个利率定义我们的匿名函数。从时间0开始。以月为单位。去10年。从100美元开始。这是我们用ODE1计算复利的结果。, 121年的数字。
MATLAB实际上有一种查看美元和美分的格式。所以这里它们是美元和美分。从100美元开始,按月计算复利,最多可达180美元多一点。我要把它画出来。我想要一个以月为单位的时间向量。
我想把它和单利做个比较。这就是计算单利的方法,每月0.5美元。现在我们把这两个画出来。直线是单利,上升到160美元。蓝线是复利。有一个轻微的上升曲线,让我们涨到180美元。这里每个月都有一个点,我们展示欧拉法的结果,我说过,它和计算复利是一样的。
最后,这里有一个练习。求线性增长的微分方程。使用ODE1重新运行这个示例两次,一次计算复利,一次计算单利。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。