问题描述
我尝试在 scipy.integrate.solve_ivp 函数中使用事件,但不明白一件事。 从 docs(https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.solve_ivp.html) 中的示例我知道当 y 位置低于 0 时我可以停止积分。当我想跟踪符号的变化时它起作用。但例如,当我的射弹的 y 位置高于 3000 m 时,我想停止集成。我尝试在 hit_ground 函数中添加“if 条件”,但它不起作用。
def hit_ground(t,y):
if y[1] > 3000:
return y[1]
我尝试从 y0 = [0,500,radians(45)] 开始积分,其中 500 是速度,45 是角度
TypeError: '
如果没有此更改,它可以正常工作。
解决方法
“事件”由事件函数为 0 定义。在您的情况下,您希望事件在高度为 3000 时发生。炮弹示例中的高度为 y[0]
(不是 {{1 }} 与您的代码一样),因此您希望事件在 y[1]
为 3000 时发生,或等效地,当 y[0]
为 0 时发生。试试这个:
y[0] - 3000