python – 如何评估SymPy给出的常量初始条件?

如何从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将强制输出的列表格式.

上一篇:python – Matplotlib只保存没有空格的文本


下一篇:python – 如何查看sklearn.preprocessing.PolynomialFeatures的效果?