<p>让我先来处理<code>d1c</code>的消去。假设您设法将第一个等式转换成<code>d1c = f(U, h, d0)</code>的形式。然后把它代入第二个方程,在<code>U</code>,<code>h</code>和{<cd5>}之间有一定的关系。在<code>d0</code>固定的情况下,它为两个变量<code>U</code>和{<cd4>}定义了一个方程,从中可以找到任何给定的<code>h</code>的{<cd3>}。这似乎就是你所说的解决方案,基于你最后的草图。
坏消息是,从任何一个方程中得到<code>d1c</code>并不容易。好消息是你不需要。在</p>
<p><code>fsolve</code>可以取一个方程组,比如两个依赖于两个变量的方程,然后给出解。在本例中:fix <code>h</code>(<code>d0</code>已经修复),并将其作为变量<code>U0</code>和<code>d1c</code>作为变量提供给<code>d0</code>。记录<code>U0</code>的值,对下一个值{<cd4>}重复上述操作,依此类推。在</p>
<p>请注意,与@duffymo的建议相反,我建议使用<code>fsolve</code>,或者至少从它开始,只有当它耗尽蒸汽时才寻找其他解算器。在</p>
<p>一个可能的警告是,对于给定的<code>h</code>,<code>U0</code>您需要一个开始的猜测,<code>fsolve</code>需要一个开始的猜测,并且没有简单的方法告诉它收敛到解决方案分支之一。如果这是一个问题,请查看<code>brentq</code>解算器。在</p>
<p>另一种方法是观察您可以轻松地从系统中消除<code>U0</code>。这样,您将得到<code>h</code>和<code>d1c</code>的一个方程,为<code>h</code>的每个值求解{<cd1>},然后使用原始方程中的任一个来计算给定的<code>d1c</code>和{<cd4>}。在</p>
<p>使用<code>fsolve</code>的示例:</p>
<pre><code>>>> from scipy.optimize import fsolve
>>> def f(x, p):
... return x**2 -p
...
>>> fsolve(f, 0.5, args=(2,))
array([ 1.41421356])
>>>
</code></pre>
<p>这里的<code>args=(2,)</code>是用来告诉<code>fsolve</code>的语法,如果<code>f(x,2)=0</code>,你真正想要解决的是<code>0.5</code>的值。在</p>