Numpy,RuntimeWarning:sqrt中遇到的值无效

时间:2018-06-01 11:13:32

标签: python numpy plotly

我正在尝试用笛卡尔坐标绘制球体。 但是,我得到一个半球,好像np.sqrt只给我正值。 我怎样才能完成球体?是否有替代np.sqrt?

我知道如何在极坐标中绘制球体或使用sin和余弦函数绘制球体,所以我只对使用x,y,z值绘制它感兴趣,如;

x**2+y**2+z**2=1

这里的代码给出了半球和警告;

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(20, 10))
ax = fig.add_subplot(1,2,1, projection = '3d')

xs=np.linspace(-1,1, 100)
ys=np.linspace(-1,1, 100)
xs,ys=np.meshgrid(xs,ys)
zs= np.sqrt(1-xs*xs-ys*ys)

ax.plot_surface(xs, ys, zs, lw = 0, antialiased = True)

1 个答案:

答案 0 :(得分:0)

根据定义,平方根函数给出了它的平方根生成数的正(也称为原则)根。

“负平方根”是等式a ^ n = b的更一般解集的一部分,其中n是根的度数,b是你取平方根的数,和a是解决方案(a和b可能很复杂)。

关键是“一般平方根”是不明确的,因为它有一堆输入的解决方案。它不是(数学)函数。 numpy使用每个人都使用的标准,这是积极的/原则性的解决方案。

如果你想要一个球体,你可以制作两个半球并翻转其中一个球体。 (我不知道如何填补他们之间的差距:()

就运行时警告而言,您在网格的角落处取负数的平方根,其中没有(实际)解决方案。那里应该没有解决方案,因为那里不存在圆圈。 (如果你打印zs,你应该看到NaNs。)