如何从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.
解决方法:
有一个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可以返回一个解决方案列表,在这种情况下,必须替换常量[0]等.要强制它在任何情况下返回列表(为了保持一致性),请使用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).这可以确保如下:
constants = solve([sol.subs(x,0), sol.subs(x, math.pi/2) - 3], symbols('C1 C2'))
再次,dict = True将强制输出的列表格式.