numpy 求多维函数的零点

jfgube3f  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(90)

我可以使用Matplotlib在NumPy数组中绘制曲线(例如,参见Save plot to numpy array)。
我想知道是否有一种方法可以只使用NumPy而不使用Matplotlib和contour来找到二元多项式的零点:

xmin,xmax,deltaX = -1.5,1.5,0.01 
ymin,ymax,deltaY = -1.5,1.5,0.01 
xrange = numpy.arange(xmin,xmax,deltaX) 
yrange = numpy.arange(ymin,ymax,deltaY) 
x,y = numpy.meshgrid(xrange,yrange) 
F = x**2*y**3-(x**2+y**2-1)**3

字符串
F的零点与曲线$x^2y^3-(x^2+y^2-1)^3$完全不同。
我尝试过一些方法(例如,参见https://codegolf.stackexchange.com/questions/86879/algebraic-curve-plotter),但它们不适用于像前一个那样的奇异代数曲线。
有一种方法可以只使用NumPy绘制代数曲线,而不使用Matplotlib和contour?

ekqde3dh

ekqde3dh1#

如果你想找到数组F等于零的位置,它就像F == 0一样简单。因为你使用的是浮点数,所以计算会有点不准确,所以你需要把它改为np.abs(F) <= epsilon,其中epsilon是一个很小的数字,它决定了在你认为它是零之前,它与零的接近程度。
这给了你一个二进制掩码,函数等于零的地方。您可以使用np.argwhere()将其转换为函数等于零的索引。
示例如下:

epsilon = 1e-7
for x_index, y_index in np.argwhere((np.abs(F) <= epsilon)):
    x_val = x[x_index, y_index]
    y_val = y[x_index, y_index]
    F_val = F[x_index, y_index]
    print(f"Value of function at ({x_val:.2f}, {y_val:.2f}) = {F_val}")

字符串
输出量:

Value of function at (0.00, -1.00) = -1.7749370367472734e-30
Value of function at (-1.00, 0.00) = 3.065340390710535e-45
Value of function at (1.00, 0.00) = -8.521646286175293e-44
Value of function at (-1.00, 1.00) = -4.884981308350689e-15
Value of function at (0.00, 1.00) = 1.774937036747201e-30
Value of function at (1.00, 1.00) = -1.554312234475219e-14


还有一些方法可以通过解析而不是数值方式找到该函数的零点。

相关问题