为什么这个抛物面不是正确的形状?

Why is this paraboloid not the correct shape?

我正在尝试使用 pyplot 创建一个圆形抛物面(向下开口)来近似某些点,但我担心我可能遗漏了一些基本的东西,因为形状没有看对了

相关代码如下:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from mpl_toolkits.mplot3d import Axes3D

# here is a function to calculate the z for a (x,y) pair
def get_z(x,y,width,height):
    # opens downward
    c = - float(height)
    # circular so same width in both directions
    x2 = (x ** 2) / float(width) 
    y2 = (y ** 2) / float(width) 

    z = (x2+y2) / c

    return(z)  

# and here a function that does the plotting based on the xs and the ys
def plot_par(axes,xs,ys,zero_x=0,zero_y=0,width=1,height=100):

    zs = np.array([])

    for x in xs:
        for y in ys:
            # need to subtract the zero to center the surface
            zs=np.append(zs,get_z(x-zero_x,y-zero_y,width,height))

    Z = zs.reshape(len(xs),len(ys))

    X,Y = np.meshgrid(xs, ys)

    axes.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,linewidth=0, antialiased=False)       

这是一个例子。我已经尽我所能地旋转了轴,但仍然看不到抛物面;看起来其中一个轴 (carga_final) 正在产生常数值:

有人看到这里有什么明显的错误吗 and/or我该如何解决?如图所示,我尝试减去中间值(最大值 + 最小值 / 2),但这并没有解决问题。

它工作正常,问题是因为你的 x 轴和 y 轴的长度不同。

例如,使用下面的线 (x = 0-100, y = 0-500) 似乎与您的轴限制相匹配,您会在 y 方向上得到一个略微弯曲的表面:

plot_par(ax,np.arange(0,100,1),np.arange(0,500,5),zero_x=50, zero_y=250)

但是,如果您的 xy 范围相同,它看起来会更好:

plot_par(ax,np.arange(0,100,1),np.arange(0,100,1),zero_x=50, zero_y=50)