【发布时间】: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