例如,我想绘制函数
f(x,y) =sin(x^2+y^2)/(x^2+y^2), x^2+y^2 <=4π
在 Mathematica 中,我可以这样做:
Plot3D[Sin[x^2 + y^2]/(x^2 + y^2), {x, -4, 4}, {y, -4, 4},
RegionFunction -> (#1^2 + #2^2 <= 4 Pi &)]
其中RegionFunction
指定要绘制的 x,y 区域。
例如,我想绘制函数
f(x,y) =sin(x^2+y^2)/(x^2+y^2), x^2+y^2 <=4π
在 Mathematica 中,我可以这样做:
Plot3D[Sin[x^2 + y^2]/(x^2 + y^2), {x, -4, 4}, {y, -4, 4},
RegionFunction -> (#1^2 + #2^2 <= 4 Pi &)]
其中RegionFunction
指定要绘制的 x,y 区域。
这是一个不是特别优雅的解决方案,它将您不想看到的区域的函数值设置为 -infinity。
[x, y] = meshgrid(-4:0.1:4, -4:0.1:4);
z = sin(x.^2+y.^2)./(x.^2+y.^2);
idx = x.^2 + y.^2 > 4*pi;
z(idx) = -Inf;
surf(x, y, z); axis vis3d;
编辑. 实际上,如果您尝试使用更精细的网格(例如 -4:0.01:4)并添加shading interp
它看起来还不错。
与 3lectrologos 的解决方案略有不同,重点是保持您想要的:
x = -4*pi:0.01:4*pi;
y = -4*pi:0.01:4*pi;
[X,Y] = meshgrid(x,y);
Clean = (X.^2 + Y.^2)<=4*pi;
Y = Y.*Clean;
X = X.*Clean;
X(~any(X,2),:) = [];
X(:, ~any(X,1)) = [];
Y(~any(Y,2),:) = [];
Y(:, ~any(Y,1)) = [];
F = sin(X.^2+Y.^2)./(X.^2+Y.^2);
mesh(X,Y,F)
请注意,在这种情况下,您需要确保 (0,0) 在您的解决方案配置文件中。
编辑:压缩矩阵以便于绘图