如何评估SymPy给出的常数初始条件?

时间:2016-12-16 21:34:43

标签: python conditional-statements sympy differential-equations

如何从SymPy给出的微分方程的解来评估常数C1和C2?初始条件f(0)= 0且f(pi / 2)= 3。

>>> from sympy import *
>>> f = Function('f')
>>> x = Symbol('x')
>>> dsolve(f(x).diff(x,2)+f(x),f(x))
f(x) == C1*sin(x) + C2*cos(x)

我尝试了一些ics的东西,但它没有用。例如:

>>> dsolve(f(x).diff(x,2)+f(x),f(x), ics={f(0):0, f(pi/2):3})
f(x) == C1*sin(x) + C2*cos(x)

顺便说一句:C2 = 0且C1 = 3。

1 个答案:

答案 0 :(得分:4)

有一个pull request实现初始/边界条件,它已合并,应该在SymPy 1.2中发布。同时,人们可以解决这样的常数:

sol = dsolve(f(x).diff(x,2)+f(x),f(x)).rhs
constants = solve([sol.subs(x,0), sol.subs(x, math.pi/2) - 3])
final_answer = sol.subs(constants)

代码将final_answer作为3.0*sin(x)返回。

说明

solve可能会返回一个解决方案列表,在这种情况下,必须替换constants[0]等。要强制它在任何情况下返回列表(为了保持一致性),请使用{{1 }}:

dict=True

如果等式包含参数,constants = solve([sol.subs(x,0), sol.subs(x, math.pi/2) - 3], dict=True) final_answer = sol.subs(constants[0]) 可能会或可能不会求解您想要的变量(C1和C2)。这可以通过以下方式确保:

solve

再次,constants = solve([sol.subs(x,0), sol.subs(x, math.pi/2) - 3], symbols('C1 C2')) 将强制输出的列表格式。