虽然另一个答案描述了阻止抛出异常所需的机械转换,但它不会在您的情节中得到任何点。 Numpy 是一个数值库,而您想要/需要解方程。
numpy.arange(0, 12, 0.01) 生成一个 有限 系列数字,从 0 开始,以 0.01 递增,直到达到 12。您给出上面的一个等式,该等式主要被翻译成 Python 代码,并在这些有限上对其进行评估一系列数字,并要求它绘制两个表达式计算为相同数字的值。 Python 中的浮点数是 64-bit floats,因此这个相等性被检查到大约 15 个十进制数字,这对于您的数字基本上不会发生。
而不是做你想做的事,你想使用像Sympy 这样实际上会帮助你的东西。开始我们做:
from sympy import symbols, solveset, simplify, lambdify
x, y = symbols('x y')
eq1 = y**2 + y
eq2 = x**3 + x*y**2
ss = solveset(eq1 - eq2, y)
它命名一对符号,将它们放入一些方程中,solves 用于何时eq1 == eq2(等效于当它们的差为零时)。
接下来你要绘制这些解,在这种情况下可以这样做:
import numpy as np
import matplotlib.pyplot as plt
xx = np.linspace(-5, 4, 101)
for eq in ss:
fn = lambdify(x, eq)
yy = fn(xx)
# hide complex solutions
yy[~np.isreal(yy)] = np.nan
plt.plot(xx, np.real(yy), label=simplify(eq))
plt.legend()
首先引入 numpy 和 matplotlib,然后在 x 轴上采样我们要评估函数的点,然后循环解决方案,将它们转换为 Python 函数,我们可以评估以获得数字答案,接下来我们评估这在我们的采样点上,丢弃复杂的解决方案,并绘制结果。
这给出了:
x = -4.5 周围的差距是由于此时的采样稀疏。我们可以通过在x=-4.5, y=10 评估我们的方程来检查,两个方程我得到 ~110