如何绘制 3D 图?
How to 3D plot?
由于我在矩阵中存储数据的方式(对应于插槽的 x 和 y 值),我无法让 xi
和 yi
范围包含任何正整数值它们存储在),但我想不出更聪明的方法。有人可以帮帮我吗?我希望能够让 xi = -30:30
和 yi = -30:30
.
function test3
f = @(x,y) y*sin(x) + sqrt(y);
function p
xi = 1:30;
yi = 1:30;
pts = zeros(size(xi,2),size(yi,2));
for x = xi
for y = yi
pts(x,y) = pts(x,y) + f(x,y);
end
end
surf(xi,yi,pts)
end
p
end
我正在处理的实际代码:
function Eplot(z, w, R, Psi)
ni = 0:2:4;
mi = 0;
xi = -30:30;
yi = -30:30;
pts = zeros(size(xi,2),size(yi,2));
for n = ni
for m = mi
for x = xi
for y = yi
pts(x,y) = pts(x,y) + utot(z, x/10^4, y/10^4, n, m, w, R, Psi);
end
end
end
end
surf(xi,yi,pts)
end
Eplot(zi, wi, Ri, Psii)
使用 meshgrid
(如 surf
的文档中所述)并编写您的函数 f
以使用逐个元素的操作,以便它可以接受矩阵输入。
f = @(x,y) y.*sin(x) + sqrt(y);
xi = -30:30;
yi = -30:30;
[x,y]=meshgrid(xi,yi);
surf(xi,yi,f(x,y))
(此外,我希望您真的不想为 y
的负值绘制 sqrt(y)
)
如果您不能以允许为其提供向量参数的方式编写函数,那么您的 for
循环是一种合理的方法,但我会这样写:
f = @(x,y) y.*sin(x) + sqrt(y);
xi = -30:30;
yi = -30:30;
pts=zeros(length(xi),length(yi));
for ii=1:length(xi)
for jj=1:length(yi)
pts(ii,jj)=f(xi(ii),yi(jj));
%// If `f` has more variables to iterate over (n, m, etc.) and sum,
%// do those loops inside the ii and jj loops
%// I think it makes the code easier to follow
end
end
surf(xi,yi,pts)
由于我在矩阵中存储数据的方式(对应于插槽的 x 和 y 值),我无法让 xi
和 yi
范围包含任何正整数值它们存储在),但我想不出更聪明的方法。有人可以帮帮我吗?我希望能够让 xi = -30:30
和 yi = -30:30
.
function test3
f = @(x,y) y*sin(x) + sqrt(y);
function p
xi = 1:30;
yi = 1:30;
pts = zeros(size(xi,2),size(yi,2));
for x = xi
for y = yi
pts(x,y) = pts(x,y) + f(x,y);
end
end
surf(xi,yi,pts)
end
p
end
我正在处理的实际代码:
function Eplot(z, w, R, Psi)
ni = 0:2:4;
mi = 0;
xi = -30:30;
yi = -30:30;
pts = zeros(size(xi,2),size(yi,2));
for n = ni
for m = mi
for x = xi
for y = yi
pts(x,y) = pts(x,y) + utot(z, x/10^4, y/10^4, n, m, w, R, Psi);
end
end
end
end
surf(xi,yi,pts)
end
Eplot(zi, wi, Ri, Psii)
使用 meshgrid
(如 surf
的文档中所述)并编写您的函数 f
以使用逐个元素的操作,以便它可以接受矩阵输入。
f = @(x,y) y.*sin(x) + sqrt(y);
xi = -30:30;
yi = -30:30;
[x,y]=meshgrid(xi,yi);
surf(xi,yi,f(x,y))
(此外,我希望您真的不想为 y
的负值绘制 sqrt(y)
)
如果您不能以允许为其提供向量参数的方式编写函数,那么您的 for
循环是一种合理的方法,但我会这样写:
f = @(x,y) y.*sin(x) + sqrt(y);
xi = -30:30;
yi = -30:30;
pts=zeros(length(xi),length(yi));
for ii=1:length(xi)
for jj=1:length(yi)
pts(ii,jj)=f(xi(ii),yi(jj));
%// If `f` has more variables to iterate over (n, m, etc.) and sum,
%// do those loops inside the ii and jj loops
%// I think it makes the code easier to follow
end
end
surf(xi,yi,pts)