考虑以下代码,尝试使用圆柱坐标绘制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)
要发现舍入错误,对吗?