python - 如何评估 SymPy 在初始条件下给出的常数?

标签 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。

最佳答案

有一个 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] 等。强制它在任何情况下返回列表(为了保持一致性),使用 dict=True:

constants = solve([sol.subs(x,0), sol.subs(x, math.pi/2) - 3], dict=True)
final_answer = sol.subs(constants[0])

如果方程包含参数,solve 可能会或可能不会求解您想要的变量(C1 和 C2)。这可以通过以下方式确保:

constants = solve([sol.subs(x,0), sol.subs(x, math.pi/2) - 3], symbols('C1 C2'))

同样,dict=True 将强制输出列表格式。

关于python - 如何评估 SymPy 在初始条件下给出的常数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41192748/

相关文章:

reactjs - 在react render方法中嵌入链接

python - 如何用 sympy 解析和数值求解一阶线性微分方程?

python - Sympify() 和 Eval() 方程不在函数内执行

python - 在 Python 中使用 Sympy 评估符号微分

python - 使用(Python)NLTK提取产品核心关键词

python - Pandas 数据框列 : Error while replacing string value with number

python - IPython 安装后无法启动

python - 更改 lxml 中的元素命名空间

Python:如果 DataFrame 之间的其他值匹配,则对 DataFrame 中的值求和

java - .equals() 或 == 比较对象的类时