在区域上绘制f(x,y)=(21/4)x ^ 2y x ^ 2< = y< = 1

时间:2014-06-04 18:46:58

标签: matlab

有人可以使用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)

结果:

enter image description here

最后,您可以将uv平面中的区域(-1,1)x(0,1)映射到xy平面中由$ y = x ^ 2和y = 1限定的区域中参数化:

f(u,v)=(u \ sqrt {v},v)

捕获:https://math.stackexchange.com/questions/823168/transform-rectangular-region-to-region-bounded-by-y-1-and-y-x2

此代码生成上面显示的相同图像:

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)

2 个答案:

答案 0 :(得分:2)

首先,让我们看一下你有效的价值区域。这告诉我们y >= x^2y <= 1。这意味着您的y值必须位于由抛物线x^2限定的正平面上,并且它们也必须小于或等于1.换句话说,您的y值必须绑定在区域由y = x^2y = 1决定。以图片形式,您的y值受此限制:

enter image description here

因此,您的x值也必须绑定在-1和1之间。因此,您的实际边界为:-1 <= x <= 10 <= y <= 1。但是,这只会找到xy的边界,但它不能处理绘图中有效值的位置。我们稍后会解决这个问题。

现在我们已经建立了这个,您可以使用ezsurf在MATLAB中绘制由2D方程指定的曲面图。

您可以这样致电ezsurf

ezsurf(FUN, [XMIN,XMAX,YMIN,YMAX]);

FUN是一个函数或字符串,其中包含您想要的等式,XMIN,XMAX,YMIN,YMAX包含最低和最高xy您想要绘制的值。没有这些值的绘图假定两个维度中的-2*pi2*pi的范围。因此,让我们创建一个新功能,它将在我们拥有有效值时处理,并且当我们没有时。使用此代码,并将其保存到名为myfun.m的新文件中。请务必将其保存到当前的工作目录

function z = myfun(x,y)
    z = (21/4)*x.^2.*y;
    z(~(x.^2 <= y & y <= 1)) = nan;
end

这将允许您获取一系列xy值以及由您提供给我们的2D方程式指示的输出值。任何不满足x^2 <= y <= 1条件的值,您都将其设置为NaNezsurf不会绘制NaN值。

现在,请像这样致电ezsurf

ezsurf(@myfun, [-1,1,0,1]); 

你得到:

enter image description here

这将为您生成一个新的图形,顶部有一些工具可以让您与3D图形进行交互。例如,您可以使用旁边顶部栏中的旋转工具旋转图形并查看其外观。单击此工具,然后左键单击鼠标并在表面图中的任意位置按住鼠标左键。您可以拖动,更改方位角和纬度以获得所需的透视。

编辑:2014年6月4日

注意到您的评论,我们可以通过增加绘图中的点数来减少锯齿状边缘。因此,您可以将最终参数附加到ezsurf,即N,即每个维度中要添加的点数。增加点数将减少每个点之间的宽度,因此绘图看起来更平滑。两个维度的默认值N均为60。让我们尝试将每个维度中的点数增加到100。

ezsurf(@myfun, [-1,1,0,1], 100);

你的情节将如下:

enter image description here

希望这有帮助!

答案 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);