与 MATLAB 中的曲面图不同的结果
Dissimilar results to the surface plot in MATLAB
>> x=0:0.001:720;
>> y=sind(x);
>> z=cosd(x);
>> surf(x,y,z);
我想使用上面的代码绘制一个曲面,即 X 轴上的 x,Y 轴上的 y,Z 轴上的 z。
我还为以下目的编写了一个 FORTRAN 代码,创建了一个 csv 文件,并在 origin 中绘制了它。我得到的结果是这样的:
然而,在 MATLAB 中,我在使用时得到了类似的想法:-
>> plot3(x,y,z)
如图所示:
但它不是表面(原因很明显)。
当使用 surf
命令时,我也收到一条错误消息:
Z
must be a matrix, not a scalar or vector.
我的代码可能存在什么问题?
使用 surf
requires Z
to be a matrix. This is fixed easily with functions like meshgrid
(also useful is griddata
).
使用 meshgrid
makes using surf
非常方便。
但是 Z
和 Y
都只是 X
的函数所以我无法解释为什么你的 plot Z
-value 会随 X
和 Y
。根据您列出的分析(数学)方程式,Z
值在 Y
维度中应该是常数。
stepsize = 1; % use 10 for cleaner look
x = 0:stepsize:720;
y = sind(x);
[X,Y] = meshgrid(x,y);
Z = cosd(X);
surf(X,Y,Z)
请注意,等高线在 Y
维度(使用 surfc(X,Y,Z)
)中是笔直且平行的。
另一种方法是遍历 x
(由 i
索引)和 y
(由 j
索引)的元素,其中 x
和y
(向量)计算 Z(i,j)
其中 Z
是矩阵。由于行和列的默认分配,此方法需要转置 Z
矩阵,例如 surf(X,Y,Z.')
.
相关帖子:
How can I plot a function with two variables in octave or matlab?
MATLAB plot part of surface
>> x=0:0.001:720;
>> y=sind(x);
>> z=cosd(x);
>> surf(x,y,z);
我想使用上面的代码绘制一个曲面,即 X 轴上的 x,Y 轴上的 y,Z 轴上的 z。 我还为以下目的编写了一个 FORTRAN 代码,创建了一个 csv 文件,并在 origin 中绘制了它。我得到的结果是这样的:
然而,在 MATLAB 中,我在使用时得到了类似的想法:-
>> plot3(x,y,z)
如图所示:
但它不是表面(原因很明显)。
当使用 surf
命令时,我也收到一条错误消息:
Z
must be a matrix, not a scalar or vector.
我的代码可能存在什么问题?
使用 surf
requires Z
to be a matrix. This is fixed easily with functions like meshgrid
(also useful is griddata
).
使用 meshgrid
makes using surf
非常方便。
但是 Z
和 Y
都只是 X
的函数所以我无法解释为什么你的 plot Z
-value 会随 X
和 Y
。根据您列出的分析(数学)方程式,Z
值在 Y
维度中应该是常数。
stepsize = 1; % use 10 for cleaner look
x = 0:stepsize:720;
y = sind(x);
[X,Y] = meshgrid(x,y);
Z = cosd(X);
surf(X,Y,Z)
请注意,等高线在 Y
维度(使用 surfc(X,Y,Z)
)中是笔直且平行的。
另一种方法是遍历 x
(由 i
索引)和 y
(由 j
索引)的元素,其中 x
和y
(向量)计算 Z(i,j)
其中 Z
是矩阵。由于行和列的默认分配,此方法需要转置 Z
矩阵,例如 surf(X,Y,Z.')
.
相关帖子:
How can I plot a function with two variables in octave or matlab?
MATLAB plot part of surface