【问题标题】:Using scipy solve_ivp for equation with initial conditions将 scipy solve_ivp 用于具有初始条件的方程
【发布时间】:2019-06-07 09:07:37
【问题描述】:

我很难习惯 scipy 的solve_ivp。所以假设我们有一个二阶的普通线性微分方程,例如弹簧(y'' = -k**2*y)。条件是当弹簧处于位置 0(时间 0)时,速度为 v0。如何使用初始条件求解?

y'' = -k**2*y  # First this needs to be modified into first order equation

.

def function1(t, y, k):  #original function
return y[1], -k**2*y[1]

function2 = lambda t, y: function1(t, y, k = 10)  #function with only t and y

t = np.linspace(0, 100, 1000)

solution = solve_ivp(function2, (0, 100), (0, 0), t_eval = t)

solution.y[0]

【问题讨论】:

  • 您知道静止的弹簧将保持静止而不受外部影响吗?此代码是您尝试过的代码的直接副本吗?如果不是,请比较任何差异。您对这段代码的结果究竟有什么问题?
  • 是的,我知道这一点,只是举个例子......让我重新表述一下这个问题。 a = -k^2 * s 。我正在尝试解决这种微分方程。如果考虑初始条件,例如速度的解应该是:v = v0*cos(k*t)。我不知道如何使用 solve_ivp 存档。
  • 如果您想在 python 中使用符号解决方案,您需要查看 sympy 及其(不完美的)dsolve。例如,请参阅 stackoverflow.com/q/53971293/3088138 或 sympy 文档。
  • 我想得到数字结果,而不是符号。
  • 那么你想要“速度的解决方案......应该是:v = v0*cos(k*t)。”被理解?除了 ODE 函数中的索引错误之外,还有什么问题?

标签: python scipy equation differential-equations


【解决方案1】:

如果您想编码 P>

y'' = -k**2*y  

作为一阶系统,应使用 P>

def function1(t, y, k):  #original function
    return y[1], -k**2*y[0]

在问题编码代码y'' = -k**2*y' P>

【讨论】:

  • @约翰:你还需要改变你的solve_ivp调用是这样的:solve_ivp(function2, (0, 100), (v0, 0), t_eval = t)。这将初始条件y(0) = v0y'(0)=0。原代码的用途(0,0)为第三参数,这意味着v0 = 0,这降低v0*cos(kt)到平面线。跨度>
  • @ unutbu谢谢!我明白。但我怎么可以修改它前进,因为在这种情况下,我得到一个错误,因为V0尚未确定......它现在使用的第一次。 SPAN>
  • 当我直接插入数字,它的作品!谢谢!
猜你喜欢
  • 2019-05-19
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 2021-11-18
  • 2013-01-03
相关资源
最近更新 更多