如何从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。
答案 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'))
将强制输出的列表格式。