我有这样的第二顺序ODE在Matlab解决:求解内部条件将第二顺序ODE - Matlab的
(a + f(t))·(dx/dt)·(d²x/dt²) + g(t) + ((h(t) + i(t)·(d²x/dt² > b·(c-x)))·(dx/dt) + j(t))·(dx/dt)² + k(t)·(t > d) = 0
其中
a
,b
,c
,d
是已知常数f(t)
,g(t)
,h(t)
,i(t)
,j(t)
,k(t)
是已知的上t
x
相关功能是位置dx/dt
是速度d²x/dt²
被加速
并注意两个条件
i(t)
在引入公式如果(d²x/dt² > b·(c-x))
k(t)
方程中引入如果(t > d)
所以,这个问题可以用类似的结构在Matlab解决如下例:
[T,Y] = ode45(@(t,y) [y(2); 'the expression of the acceleration'], tspan, [x0 v0]);
其中
T
是时间矢量,Y
是位置(如图1y(1)
柱)和速度(第2栏作为y(2)
)载体中。ode45
是ODE求解器,而是一个又一个都可以使用。tspan
,x0
,v0
是已知的。the expression of the acceleration
用于d²x/dt²
的表达,但这里来的问题,因为它是用于i(t)
,并在同一时间“外部”乘以(a + f(t))·(dx/dt)
的条件内。因此,加速度不能在MATLAB写为d²x/dt² = something
的一些问题,可以帮助:
一次
(d²x/dt² > b·(c-x))
和/或(t > d)
满足的条件下,各期限i(t)
和/或k(t)
会被引入到tspan
的确定时间的末尾。为条件
(d²x/dt² > b·(c-x))
,术语d²x/dt²
可以写成速度的差,像y(2) - y(2)'
,如果y(2)'
是前瞬间的速度,通过在tspan
限定的步进时间划分。但我不知道如何在访问速度的前值的ODE
谢谢你在先进的解决!
使用[事件位置](https://www.mathworks.com/help/matlab/math/ode-event-location.html)根据您的条件停止并启动解算器 - 这正是该功能的特点是为了。 – horchler