因此,我有一个非常冗长的函数,它为具有许多峰和谷的更高级函数绘制了高度。
我应该在x和y轴上绘制受约束的曲面,其中x的范围是1000均匀间隔的点的0到10,y也是如此。
但是我并不真正了解Meshgrid和Mesh的复杂性。
如前所述,这里是我应该绘制的复杂函数。
function z = topography(x,y)
z= 0.001*(x-3).^2 +0.001*(y-4).^2 ...
+0.5*exp(-0.25.*(x-11).^2-0.01*y.^2)...
+0.5*exp(-0.01.*x.^2-0.25*(y-11).^2)...
+0.5*exp(-0.1.*(x+1).^2-0.01*(y-5).^2)...
+0.3*exp(-0.1.*(x-3.5).^2-0.5*(y+1).^2)...
+0.5*exp(-0.1.*(x-8).^2-0.1*(y-0).^2)...
+1.*exp(-0.1.*(x-9).^2-0.1*(y-8.5).^2)...
+0.5*exp(-0.5.*(x-6).^2-0.1*(y-6).^2)...
+0.25*exp(-0.5.*(x-3).^2-0.5*(y-8).^2)...
+0.5*exp(-(x-5).^2-0.5*(y-5).^2)...
+0.25*exp(-0.75.*(x-2).^2-(y-8).^2)...
+0.5*exp(-(x-6).^2-0.5*(y-3).^2)...
+0.5*exp(-(x-5).^2-0.5*(y-9).^2)...
+0.5*exp(-(x-9).^2-0.5*(y-5).^2);
end
这是不使用meshgrid的方法:
xx=linspace(0,10,1000); % A vector with x-values from 0 to 10
yy=linspace(0,10,1000); % A vector with y-values from 0 to 10
zz=zeros(length(xx)); % A matrix of z-values
for i = 1 : length(xx)
for j = 1 : length(yy)
zz(i,j)= topography(xx(j),yy(i));
end
end
figure(1);
mesh(xx, yy, zz) % The graph z=f(x,y) for topography
这是我尝试使用meshgrid将其转换为脚本
xx = linspace(0,10,1000);
yy=linspace(0,10,1000);
zz=topography(x,y);
[x,y,z]=meshgrid(xx,yy,zz);
mesh(z);
我期望有一张精美的3D图形,描绘冗长的功能“地形图”。相反,我收到错误消息:
Requested 1000x1000x10201 (76.0GB) array exceeds maximum array size
preference. Creation of
arrays greater than this limit may take a long time and cause MATLAB to become
unresponsive.
See array size limit or preference panel for more information.
Error in meshgrid (line 77)
xx = repmat(xx, ny, 1, nz);
Error in figure11 (line 6)
[x,y,z]=meshgrid(xx,yy,zz);
它表示数组超出数组限制。但是,为什么对于使用循环来完成工作的脚本却不是这种情况呢?
答案 0 :(得分:0)
meshgrid
通常仅用于生成自变量。一旦创建了自变量网格,就可以使用它们来计算因变量。
因此,在您的脚本中,使用meshgrid
创建了 x - y 平面,并通过评估以下位置创建了地形(即高度)那些网格功能:
x = linspace(0,10,1000);
y = linspace(0,10,1000);
[xx, yy] = meshgrid(x,y);
zz = topography(xx, yy);
mesh(xx, yy, zz);
这假定函数是完全矢量化的,因此它可以接收矩阵并生成大小相等的矩阵。而发布的地形功能似乎就是这样。