用柱坐标在Matlab中绘制半球体

用柱坐标在Matlab中绘制半球体,matlab,Matlab,考虑下面的代码,它试图使用柱坐标绘制z=sqrt(4-x^2-y^2)。当然,球坐标更合适,但我的问题涉及到下面的代码发生了什么 r=linspace(0,2,20); theta=linspace(0,2*pi,40); [r,theta]=meshgrid(r,theta); x=r.*cos(theta); y=r.*sin(theta); z=sqrt(4-x.^2-y.^2); mesh(x,y,z) >>弗尔 MATLAB版本:8.1.0.604(R2013a) 操作系统:Ma

考虑下面的代码,它试图使用柱坐标绘制z=sqrt(4-x^2-y^2)。当然,球坐标更合适,但我的问题涉及到下面的代码发生了什么

r=linspace(0,2,20);
theta=linspace(0,2*pi,40);
[r,theta]=meshgrid(r,theta);

x=r.*cos(theta);
y=r.*sin(theta);
z=sqrt(4-x.^2-y.^2);

mesh(x,y,z)
>>弗尔 MATLAB版本:8.1.0.604(R2013a) 操作系统:Mac OS X版本:10.9.5内部版本:13F34 Java版本:Java 1.6.0_65-b14-462-11M4609,采用Apple Inc.Java HotSpot(TM)64位服务器虚拟机混合模式

由于以下错误,上述代码将不会打印

Error using mesh (line 76)
X, Y, Z, and C cannot be complex

我觉得奇怪的是,矩阵z的所有值都用复数形式表示。毕竟,我正在绘制x^2+y^2区域上的曲面,是的,我认为是舍入误差。如果你做了
z=real(sqrt(4-x.^2-y.^2))然后它工作正常。不过,您的
z=sqrt(4-r.^2)
想法很巧妙!同意,这是舍入错误。如果您按照David的建议添加对
real
的调用,则应该设置
z =

  Columns 1 through 3

   2.0000 + 0.0000i   1.9972 + 0.0000i   1.9889 + 0.0000i
   2.0000 + 0.0000i   1.9972 + 0.0000i   1.9889 + 0.0000i
   2.0000 + 0.0000i   1.9972 + 0.0000i   1.9889 + 0.0000i
   2.0000 + 0.0000i   1.9972 + 0.0000i   1.9889 + 0.0000i
format long
  0.000000021073424 + 0.000000000000000i
  0.000000000000000 + 0.000000021073424i
  0.000000021073424 + 0.000000000000000i
  0.000000000000000 + 0.000000014901161i
  0.000000000000000 + 0.000000010536712i
  0.000000007450581 + 0.000000000000000i
  0.000000000000000 + 0.000000013938760i
  0.000000000000000 + 0.000000000000000i
>> z(39,20)

ans =

      0.000000000000000e+00 + 1.393875996311732e-08i
clc
close all
r=linspace(0,2,20);
theta=linspace(0,2*pi,40);
[r,theta]=meshgrid(r,theta);

x=r.*cos(theta);
y=r.*sin(theta);
z=sqrt(4-r.^2);

mesh(x,y,z)
clc
close all
r=linspace(0,2,20);
theta=linspace(0,2*pi,40);
[r,theta]=meshgrid(r,theta);

x=r.*cos(theta);
y=r.*sin(theta);
z=sqrt(4-(x.^2+y.^2));

mesh(x,y,z)