Man*_*ish 5 python solver sympy equation-solving
如何解决SymPy中非线性方程的形式
y = P*x + Q + sqrt(S*x + T)
Run Code Online (Sandbox Code Playgroud)
在那里我知道y(0),y'(0),y(c),y'(c).我想找到P,Q,S和T.并表示y作为的函数x.
我对文档感到非常困惑.请帮忙.
注意:我对你原来的 方程表示同情y = P*x + Q + sqrt(S*x + T)。我将使用它y = P*x + Q + x*x*(S*x + T)只是为了能够演示 sympy 求解器如何工作(当它工作时)。
战略:
代码:
# Set up variables and equations
x, y, P, Q, S, T, = sympy.symbols('x y P Q S T')
c, y_0, y_c, dy_0, dy_c = sympy.symbols('c y_0 y_c dy_0 dy_c')
eq_y = P * x + Q + x * x * (S * x + T)
eq_dy = eq_y.diff(x)
# Set up simultaneous equations that sympy will solve
equations = [
(y_0 - eq_y).subs(x, 0),
(dy_0 - eq_dy).subs(x, 0),
(y_c - eq_y).subs(x, c),
(dy_c - eq_dy).subs(x, c)
]
# Solve it for P, Q, S and T
solution_set = sympy.solve(equations, P, Q, S, T, set = True)
# Extract names, individual solutions and print everything
names = solution_set[0]
solutions = list(solution_set[1])
for k in range(len(solutions)):
print('Solution #%d' % (k+1))
for k2, name in enumerate(names):
print('\t%s: %s' % (name, solutions[k][k2]) )
Run Code Online (Sandbox Code Playgroud)
输出:
Solution #1
P: dy_0
Q: y_0
S: (c*(dy_0 + dy_c) + 2*y_0 - 2*y_c)/c**3
T: (-c*(2*dy_0 + dy_c) - 3*y_0 + 3*y_c)/c**2
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用这些解决方案之一并执行另一种解决方案.subs(...),以获得y纯粹由常量 和 组成的函数x。
至于你原来的方程...我想知道是否有人应该为 sympy 提交错误报告,以便他们可以改进它...:)
| 归档时间: |
|
| 查看次数: |
1174 次 |
| 最近记录: |