主要内容

歌唱活动的位置

活动地点是什么?

一些系统的常微分方程求解上的困难的一部分是确定一个适当的时间停止的解决方案。最后的时间间隔的集成可能被定义为一个特定的事件而不是一个数字。一个例子是一个苹果从树上落下。ODE求解器应该停止一旦苹果落到地面上,但你可能不会事先知道这个事件什么时候发生。同样的,一些问题涉及不终止事件的解决方案。一个例子是月球绕地球。在这种情况下,您可能不想停止集成早,但你仍然想探测月球每次完成一个周期的大的身体。

使用事件函数来检测某些事件发生时在颂歌的解决方案。你指定的事件函数将一个表达式,检测到一个事件时,表达式等于零。他们还可以信号ODE求解器检测到一个事件时停止集成。

编写一个事件函数

使用“事件”选择的odeset函数来指定一个事件函数。事件函数必须有一般形式

(价值、isterminal方向)= myEventsFcn (t, y)

在的情况下ode15i事件函数也必须接受第三个输入参数yp

输出参数价值,isterminal,方向向量的对应于th元素th事件:

  • 值(我)是一个数学表达式描述事件。一个事件发生在值(我)等于零。

  • isterminal (i) = 1如果集成时终止事件发生时。否则,它是0

  • 方向(i) = 0如果所有0(默认)。的值+ 1定位只有0事件功能的增加,和1事件函数减少定位只有0。指定方向= []使用的默认值0对所有事件。

再次,考虑的情况下一个苹果从树上落下。ODE落体的代表

y = 1 + y 2 ,

与初始条件 y ( 0 ) = 1 y ( 0 ) = 0 。您可以使用一个事件函数来判断 y ( t ) = 0 当苹果砸到地面。对于这个问题,一个事件函数,当苹果砸到地面检测

函数(位置、isterminal方向)= appleEventsFcn (t、y)位置= y (1);%的价值,我们希望为零isterminal = 1;%停止集成方向= 0;% 0可以从两个方向靠近结束

事件信息

如果您指定一个事件函数,然后调用ODE求解器和三个额外的输出参数,

[t y te,你们()= odeXY (odefun tspan, y0,选项)

三个额外的输出返回的解算器对应检测到事件:

  • te是一个列向量的事件发生。

  • 包含解决方案价值在每个事件的时间te

  • 包含指数的向量函数返回的事件。事件解算器检测到的值表示。

或者,你可以叫一个输出的解算器,

索尔= odeXY (odefun tspan, y0,选项)

在这种情况下,事件信息存储结构sol.te,sol.ye,sol.ie

限制

root-finding机制受雇于ODE求解器与事件函数这些限制:

  • 如果一个终端事件发生在集成的第一步,那么解决注册事件非终结符和持续集成。

  • 如果不止一个终端事件发生在第一步,那么只有第一个事件寄存器和解决者持续集成。

  • 零是由符号之间的交叉步骤。因此,零函数之间的交叉与偶数的步骤可以错过。

如果过去事件的解决步骤,试着减少RelTolAbsTol提高准确性。另外,组MaxStep将一个上界的步长。调整tspan不会改变所采取的步骤解决。

简单事件地点:一个弹跳球

这个例子展示了如何编写一个简单的事件函数使用ODE求解器进行求解。示例文件ballode弹力球的运动模型。事件函数停止集成每次皮球跳,然后集成重启新的初始条件。皮球跳,集成停止和重启好几次了。

弹力球的方程

数组$ $ \开始{}{cl} y ' _1 & # 38; = y_2 \ \ y ' _2 & # 38; = -9.8。\{数组}$ $

球反弹发生在球的高度美元美元y_1 (t)减少后等于零。这种行为是一个事件函数,代码

函数(价值、isterminal方向)= bounceEvents (t、y)值= y (1);%检测身高= 0isterminal = 1;%停止集成方向= 1;%只负方向

类型ballode要运行示例和说明的使用事件函数来模拟一个球的弹跳。

ballode

先进的活动地点:限制性三体问题

这个例子展示了如何使用一个事件的定向组件功能。示例文件orbitode模拟一个限制性三体问题身体绕两个更大的身体。事件函数决定了分轨道环绕身体最近和最远的地方。因为事件的价值函数是相同的轨道,最近和最远的点的零交叉的方向是区分他们。

限制性三体问题的方程

数组$ $ \开始{}{cl} y ' _1 & # 38; = y_3 \ \ y ' _2 & # 38; = y y_4 \ \ ' _3 & # 38; = 2 y_4 + y_1 & # xA; \压裂{\μ^ * (y_1 + \μ)}{r_1 ^ 3} - \压裂{\μ(y_1 - \μ^ *}{r_2 ^ 3} \ \ y ' _4 & # 38; = & # xA; 2 y_3 + y_2 - \压裂{\μ^ * y_2} {r_1 ^ 3} - \压裂{\μy_2} {r_2 ^ 3}, & # xA; \{数组}$ $

在哪里

$ ${数组}{cl} \ \开始μ& # 38;= 1/82.45 \ \ \μ^ * & # 38;μ= 1 - \ \ \ r_1 & # 38; = & # xA; \√6 {(y_1 + \μ)^ 2 + y_2 ^ 2} \ \ r_2 & # 38; = \√6 {(y_1 \μ^ *)^ 2 + & # xA; y_2 ^ 2} \{数组}$ $结束。

前两个解决方案组件的坐标无穷小的身体质量,所以策划反对另一个身体的轨道。

函数嵌套的事件orbitode.m搜索两个事件。一个事件定位的最大距离的起点,和其他定位的宇宙飞船返回到起点。事件定位准确,尽管使用的步骤大小集成商并不取决于事件的位置。在这个例子中,指定零交叉的方向的能力是至关重要的。回到起点点和最大距离起点的意义有相同的事件值,和十字路口的方向是用来区分它们。这种行为是一个事件函数,代码

函数(价值、isterminal方向)= orbitEvents (t, y)% dDSQdt是当前距离方程的导数。当地的%最小值/最大值发生在这个值是零。dDSQdt = 2 * ((y (1:2) y0(1:2))的* y (3:4));值= [dDSQdt;dDSQdt];isterminal = [1;0);%停留在局部最小值方向= [1;1);%(局部最小值,局部最大值)结束

类型orbitode要运行示例。

orbitode
这是一个例子的事件位置指定零交叉的方向的能力是至关重要的。回到初始点的点和最大距离的函数值具有相同的事件,和十字路口的方向是用来区分它们。与事件函数调用数值活跃……注意,使用的步骤大小集成商并不取决于事件的位置,和事件仍定位准确。

另请参阅

|

相关的话题