求解具有内部条件的二阶 ODE - Matlab
Solving an 2nd order ODE with internal conditions - Matlab
我要在 Matlab 中求解这个二阶 ODE:
(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²
是加速度
并注意
的两个条件
如果 (d²x/dt² > b·(c-x))
,则在等式中引入 i(t)
如果 (t > d)
,则在等式中引入 k(t)
所以,这个问题可以在 Matlab 中使用类似的结构来解决,例如:
[T,Y] = ode45(@(t,y) [y(2); 'the expression of the acceleration'], tspan, [x0 v0]);
哪里
T
是时间向量,Y
是位置向量(第1列为y(1)
)和速度向量(第2列为y(2)
)。
ode45
是 ODE 求解器,但也可以使用另一个求解器。
tspan
,x0
,v0
已知。
the expression of the acceleration
表示 d²x/dt²
的表达式,但是 问题来了,因为它在 i(t)
和 'outside' 的条件内同时乘以(a + f(t))·(dx/dt)
。所以,加速度不能在matlab中写成d²x/dt² = something
一些可能有帮助的问题:
一旦满足条件(d²x/dt² > b·(c-x))
and/or(t > d)
,相应的项i(t)
and/ork(t)
将被介绍到tspan
.
中确定的时间结束
对于条件(d²x/dt² > b·(c-x))
,项d²x/dt²
可以写成速度差,如y(2) - y(2)'
,如果y(2)'
是前一瞬间的速度除以 tspan
中定义的步进时间。但我不知道如何在 求解 ODE
期间访问先前的速度值
在此先感谢您!
既然你提到了
ode45 is the ODE solver, but another one could be used.
你关心的(在我看来)是访问历史记录,以便你可以评估 d^2x/dt^2
自己,引入新条件,你是否考虑过调查 dde23
(延迟差异)?
根据文档,您自己指定滞后时间向量,并且可以选择将历史指定为“...如果此调用继续该集成,则集成的先前解决方案”https://www.mathworks.com/help/matlab/ref/dde23.html。
希望这会有所帮助,因为至少您应该能够通过包装自己的函数来解决问题,returns 来自 dde23 解决方案的值并检查您应该引入新条件的点你自己,然后指定新函数,根据需要编译你的结果,从本质上将问题简化为更多步骤。
我要在 Matlab 中求解这个二阶 ODE:
(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)
如果(t > d)
,则在等式中引入 k(t)
(d²x/dt² > b·(c-x))
,则在等式中引入 所以,这个问题可以在 Matlab 中使用类似的结构来解决,例如:
[T,Y] = ode45(@(t,y) [y(2); 'the expression of the acceleration'], tspan, [x0 v0]);
哪里
T
是时间向量,Y
是位置向量(第1列为y(1)
)和速度向量(第2列为y(2)
)。ode45
是 ODE 求解器,但也可以使用另一个求解器。tspan
,x0
,v0
已知。the expression of the acceleration
表示d²x/dt²
的表达式,但是 问题来了,因为它在i(t)
和 'outside' 的条件内同时乘以(a + f(t))·(dx/dt)
。所以,加速度不能在matlab中写成d²x/dt² = something
一些可能有帮助的问题:
一旦满足条件
(d²x/dt² > b·(c-x))
and/or(t > d)
,相应的项i(t)
and/ork(t)
将被介绍到tspan
. 中确定的时间结束
对于条件
(d²x/dt² > b·(c-x))
,项d²x/dt²
可以写成速度差,如y(2) - y(2)'
,如果y(2)'
是前一瞬间的速度除以tspan
中定义的步进时间。但我不知道如何在 求解 ODE 期间访问先前的速度值
在此先感谢您!
既然你提到了
ode45 is the ODE solver, but another one could be used.
你关心的(在我看来)是访问历史记录,以便你可以评估 d^2x/dt^2
自己,引入新条件,你是否考虑过调查 dde23
(延迟差异)?
根据文档,您自己指定滞后时间向量,并且可以选择将历史指定为“...如果此调用继续该集成,则集成的先前解决方案”https://www.mathworks.com/help/matlab/ref/dde23.html。
希望这会有所帮助,因为至少您应该能够通过包装自己的函数来解决问题,returns 来自 dde23 解决方案的值并检查您应该引入新条件的点你自己,然后指定新函数,根据需要编译你的结果,从本质上将问题简化为更多步骤。