# 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]) )
2 回答
注意:我的同情被绞在你原来的
y = P*x + Q + sqrt(S*x + T)
等式上 . 我将使用y = P*x + Q + x*x*(S*x + T)
只是为了能够演示同情解算器的工作原理(当它工作时) .Strategy:
表达y作为其他变量(x,P,Q,S,T)的函数
区分y
使用已知常数(0,c,y(0),y(c),y '(0), y'(c))设置4个方程式
使用sympy解决
打印每种可能的解决方案(如果有的话)
Code:
Output:
您现在可以使用其中一个解决方案并执行另一个
.subs(...)
来获取y
作为一个纯粹由您的常量和x
组成的函数 .至于你原来的等式...我想知道是否有人应该提交一个错误报告,以便他们可以改进它...... :)
现在解算器在求解具有更多
sqrt
的方程组时有一些问题 . 所以在下面的代码中首先删除sqrt
然后求解方程组 . 对于这些类型的方程,当前求解器并不快,执行大约需要10秒 .答案:
请交叉检查答案 .