【发布时间】:2016-10-29 22:32:10
【问题描述】:
给定一些f和微分方程x'(t) = f(x (t)),我如何计算 x(n)(t ) 表示为 x(t)?
例如,给定 f(x(t)) = sin(x( t)), 我想获得 x(3)(t) = (cos(x(t))2 - sin(x(t))2) sin(x (t))。
到目前为止我已经尝试过
>>> from sympy import diff, sin
>>> from sympy.abc import x, t
>>> diff(sin(x(t)), t, 2)
这给了我
-sin(x(t))*Derivative(x(t), t)**2 + cos(x(t))*Derivative(x(t), t, t)
但我不确定如何告诉 SymPy Derivative(x(t), t) 是什么并让它自动找出 Derivative(x(t), t, t) 等。
答案:
根据我在下面收到的答案,这是我的最终解决方案:
def diff(x_derivs_known, t, k, simplify=False):
try: n = len(x_derivs_known)
except TypeError: n = None
if n is None:
result = sympy.diff(x_derivs_known, t, k)
if simplify: result = result.simplify()
elif k < n:
result = x_derivs_known[k]
else:
i = n - 1
result = x_derivs_known[i]
while i < k:
result = result.diff(t)
j = len(x_derivs_known)
x0 = None
while j > 1:
j -= 1
result = result.subs(sympy.Derivative(x_derivs_known[0], t, j), x_derivs_known[j])
i += 1
if simplify: result = result.simplify()
return result
例子:
>>> diff((x(t), sympy.sin(x(t))), t, 3, True)
sin(x(t))*cos(2*x(t))
【问题讨论】:
-
您应该将您的答案与您的问题分开发布。
-
@Fermiparadox:这不是我的真正答案,它只是对我从其他答案中收集到的内容的描述。我不希望它从现有答案中夺走潜在的选票......
-
@Mehrdad 您仍然应该将其发布为答案。它不会带走选票(您可以对多个答案进行投票)。
-
@asmeurer:我的意思是人们可能会投票给我而不是他们的答案,因为它更好(人们通常只是投票给最佳答案)即使它是基于他们的。我也不明白这一点。
标签: python sympy differential-equations