pla*_*zer 5 python sympy conditional-statements 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)
Run Code Online (Sandbox Code Playgroud)
我尝试了一些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)
Run Code Online (Sandbox Code Playgroud)
顺便说一下:C2 = 0 和 C1 = 3。
小智 5
有一个实现初始/边界条件的拉取请求,该请求已合并并应在 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)
Run Code Online (Sandbox Code Playgroud)
代码返回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])
Run Code Online (Sandbox Code Playgroud)
如果方程包含参数,solve可能会或可能不会求解您想要的变量(C1 和 C2)。这可以确保如下:
constants = solve([sol.subs(x,0), sol.subs(x, math.pi/2) - 3], symbols('C1 C2'))
Run Code Online (Sandbox Code Playgroud)
再次,dict=True将强制输出的列表格式。
| 归档时间: |
|
| 查看次数: |
6689 次 |
| 最近记录: |