有人可以使用MATLAB共享一项技术,在x ^ 2< = y< = 1?
的区域内绘制表面f(x,y)=(21/4)x ^ 2y此外,如果有人知道某些教程或链接有助于解决此类问题,请与他人分享一下吗?
感谢。
这是另一种方法:
%%
close all
x=linspace(-1,1,40);
g1=x.^2;
g2=ones(1,40);
y=[];
n=20;
for k=0:n
y=[y;g1+(g2-g1)*k/n];
end
x=x(ones(1,n+1),:);
z=21/4*x.^2.*y;
meshz(x,y,z)
axis tight
xlabel('x-axis')
ylabel('y-axis')
view(136,42)
结果:
最后,您可以将uv平面中的区域(-1,1)x(0,1)映射到xy平面中由$ y = x ^ 2和y = 1限定的区域中参数化:
f(u,v)=(u \ sqrt {v},v)
此代码生成上面显示的相同图像:
close all
[u,v]=meshgrid(linspace(-1,1,40),linspace(0,1,20));
x=u.*sqrt(v);
y=v;
z=21/4*x.^2.*y;
meshz(x,y,z)
axis tight
xlabel('x-axis')
ylabel('y-axis')
view(136,42)
答案 0 :(得分:2)
首先,让我们看一下你有效的价值区域。这告诉我们y >= x^2
和y <= 1
。这意味着您的y值必须位于由抛物线x^2
限定的正平面上,并且它们也必须小于或等于1.换句话说,您的y
值必须绑定在区域由y = x^2
到y = 1
决定。以图片形式,您的y
值受此限制:
因此,您的x
值也必须绑定在-1和1之间。因此,您的实际边界为:-1 <= x <= 1
和0 <= y <= 1
。但是,这只会找到x
和y
的边界,但它不能处理绘图中有效值的位置。我们稍后会解决这个问题。
现在我们已经建立了这个,您可以使用ezsurf
在MATLAB中绘制由2D方程指定的曲面图。
您可以这样致电ezsurf
:
ezsurf(FUN, [XMIN,XMAX,YMIN,YMAX]);
FUN
是一个函数或字符串,其中包含您想要的等式,XMIN,XMAX,YMIN,YMAX
包含最低和最高x
和y
您想要绘制的值。没有这些值的绘图假定两个维度中的-2*pi
到2*pi
的范围。因此,让我们创建一个新功能,它将在我们拥有有效值时处理,并且当我们没有时。使用此代码,并将其保存到名为myfun.m
的新文件中。请务必将其保存到当前的工作目录。
function z = myfun(x,y)
z = (21/4)*x.^2.*y;
z(~(x.^2 <= y & y <= 1)) = nan;
end
这将允许您获取一系列x
和y
值以及由您提供给我们的2D方程式指示的输出值。任何不满足x^2 <= y <= 1
条件的值,您都将其设置为NaN
。 ezsurf
不会绘制NaN
值。
现在,请像这样致电ezsurf
:
ezsurf(@myfun, [-1,1,0,1]);
你得到:
这将为您生成一个新的图形,顶部有一些工具可以让您与3D图形进行交互。例如,您可以使用手旁边顶部栏中的旋转工具旋转图形并查看其外观。单击此工具,然后左键单击鼠标并在表面图中的任意位置按住鼠标左键。您可以拖动,更改方位角和纬度以获得所需的透视。
注意到您的评论,我们可以通过增加绘图中的点数来减少锯齿状边缘。因此,您可以将最终参数附加到ezsurf
,即N
,即每个维度中要添加的点数。增加点数将减少每个点之间的宽度,因此绘图看起来更平滑。两个维度的默认值N
均为60。让我们尝试将每个维度中的点数增加到100。
ezsurf(@myfun, [-1,1,0,1], 100);
你的情节将如下:
希望这有帮助!
答案 1 :(得分:1)
尝试以下操作来制作所需的功能,计算值,并仅绘制所需的区域:
% Make the function. You could put this in a file by itself, if you wanted.
f = @(x,y) (21/4)*x.^2.*y;
[X Y] = meshgrid(linspace(0,1));
Z = f(X,Y);
% compute the values we want to plot:
valsToPlot = (X.^2 <= Y) & (Y <= 1);
% remove the values that we don't want to plot:
X(~valsToPlot) = nan;
Y(~valsToPlot) = nan;
Z(~valsToPlot) = nan;
% And... plot.
figure(59382);
clf;
surf(X,Y,Z);