我有這樣的第二順序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