<p>注:我对你最初的<code>y = P*x + Q + sqrt(S*x + T)</code>方程式表示同情。
我将使用<code>y = P*x + Q + x*x*(S*x + T)</code>来演示sympy解算器是如何工作的(当它工作时)。在</p>
<p><strong>策略:</strong></p>
<ul>
<li>将y表示为其他变量(x,P,Q,S,T)的函数</li>
<li>区分y</li>
<li>用已知常数(0,c,y(0),y(c),y'(0),y'(c))建立4个方程</li>
<li>使用sympy solve</li>
<li>打印每个可能的解决方案(如果有)</li>
</ul>
<p><strong>代码:</strong></p>
<pre><code># 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]) )
</code></pre>
<p><strong>输出:</strong></p>
^{pr2}$
<p>现在,您可以使用其中一个解决方案,并执行另一个<code>.subs(...)</code>来获得{<cd4>}作为一个纯粹由常量和<code>x</code>组成的函数。在</p>
<p>至于你最初的方程式。。。我想知道是否有人应该为sympy提交一个错误报告,以便他们能够改进它。。。:)</p>