使用圆柱坐标在Matlab中绘制半球

时间:2014-09-22 03:42:20

标签: 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) 操作系统:Mac OS X版本:10.9.5 Build:13F34 Java版本:Java 1.6.0_65-b14-462-11M4609与Apple Inc. Java HotSpot(TM)64位服务器VM混合模式

由于以下错误,上述代码不会绘制。

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

我觉得很奇怪,矩阵z的所有值都以复杂的形式表示。毕竟,我正在绘制区域x ^ 2 + y ^ 2 <= 4上的表面。例如,一些值:

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

然后查看矩阵z的最后一些条目,它们位于z的第20列(当r = 2时计算),我们看到:

  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)

要发现舍入错误,对吗?

0 个答案:

没有答案