擅长:python、mysql、java
<p>半形式化地,您要解决的问题是:给定d0,对h和U0解逻辑公式“存在d1c,使得eq1(h,U0,d1c,d0)=eq2(h,U0,d1c,d0)=0”。在</p>
<p>有一种将公式化简为多项式方程“p(h,U0)=0”的算法,称为“量词消去”,它通常依赖于另一种算法“圆柱代数分解”。不幸的是,这还没有在sympy中实现。在</p>
<p>然而,由于U0很容易被排除,你可以用sympy做一些事情来找到你的答案。从</p>
<pre><code>h, U0, d1c, d0 = symbols('h, U0, d1c, d0')
f1 = (U0) ** 2 * ((d0 ** 2 / d1c ** 3) + (1 - d0) ** 2 / (1 - d1c - d0 * h) ** 3) - 1
f2 = U0**2 / 2 * ((d0 ** 2 / d1c ** 2) + (1 - d0) ** 2 / (1 - d1c - d0 * h)) + d1c + d0 * (h - 1)
</code></pre>
<p>现在,从f1中去掉U0,并在f2中插入值(我是“手动”而不是使用solve()来获得更漂亮的表达式):</p>
^{pr2}$
<p>f3只依赖于h和d1c。而且,由于它是有理分式,我们只关心它的分子何时变为0,所以我们得到了一个包含两个变量的多项式方程:</p>
<pre><code>p3 = fraction(cancel(f3))
</code></pre>
<p>现在,对于一个给定的d0,你应该能够用数值的方法把p3.subs(d0.1)转化成h(d1c),把它插回到U0中,并把(h,U0)作为d1c的函数进行参数化绘图</p>