Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 八度-为什么surf不工作,而trisurf工作?_Matlab_Octave - Fatal编程技术网

Matlab 八度-为什么surf不工作,而trisurf工作?

Matlab 八度-为什么surf不工作,而trisurf工作?,matlab,octave,Matlab,Octave,我能够绘制一个三曲面图,但surf不起作用 我做错了什么 pkg load statistics; figure (1,'name','Matrix Map'); colormap('hot'); t = dlmread('C:\Map3D.csv'); tx =t(:,1);ty=t(:,2);tz=t(:,3); tri = delaunay(tx,ty); handle = surf(tx,ty,tz); #This does NOT work #handle = trisurf(tri,

我能够绘制一个三曲面图,但surf不起作用

我做错了什么

pkg load statistics;
figure (1,'name','Matrix Map');
colormap('hot');
t = dlmread('C:\Map3D.csv');
tx =t(:,1);ty=t(:,2);tz=t(:,3);
tri = delaunay(tx,ty);
handle = surf(tx,ty,tz); #This does NOT work
#handle = trisurf(tri,tx,ty,tz);  #This does work
`错误:曲面:行(Z)必须与长度(Y)相同,列(Z)必须与长度相同 (十)

我的数据是CSV格式(此处未显示逗号)


surf
错误消息在Matlab或倍频程中不同

来自Matlab的错误消息:

Z必须是矩阵,而不是标量或向量

这里的问题非常清楚,因为您指定了
Z
(对于您
tz
)作为向量

来自倍频程的错误消息:

曲面:行(Z)必须与长度(Y)相同,列(Z)必须与长度(X)相同

这里你错了,因为在你的例子中,列(Z)=1,但长度(X)=26,所以这里是错误的

这样做的后果之一是,使用
surf
时,网格上不能有“洞”或未定义的点。在您的示例中,X轴网从1到5,Y轴网从2到4.5,但未定义坐标点(2,4.5)


@Luis Mendo、Matlab和Octave确实允许原型
surf(矩阵x、矩阵y、矩阵z)
,但第三个参数
矩阵z
仍然必须是矩阵(而不是标量或向量)。显然,只有一行或一列的矩阵不被视为矩阵


为了解决这个问题,我建议如下:

tx = 1:5; % tx is a vector of length 5
ty = 2:0.5:4.5; % ty is a vector of length 6
tz = [-0.32 0.33 0.39 0.09 0.14;
      -0.19 0.13 0.15 0.24 0.33;
       0.06 0.44 0.36 0.45 0.51;
       0.72 0.79 0.98 0.47 0.55;
       0.61 0.13 0.44 0.47 0.58;
       0.85 0.   0.   0.   0.]; % tz is a matrix of size 6*5
surf(tx,ty,tz);

请注意,我必须在未定义网格的点上创建一些值,我将
0。
但您可以使用您喜欢的值进行更改。

错误消息中明确指出了原因:
surf
期望
x
y
作为向量(定义笛卡尔网格)和
z
作为矩阵(该网格上的数据)具有适当的大小。在您的例子中,这三个参数似乎是向量(可能不是网格状的)。我看不到关于向量或矩阵的任何信息!你看到的是不同的错误消息吗?你能告诉我如何从我现有的内容转换到向量或矩阵吗?你是对的。我正在考虑一种称为
surf
,即
surf(vector\ux,vector\uy,matrix\uz)
,但它也可以是
surf(矩阵x,矩阵y,矩阵z)
。我建议您看看中的示例。事实上,我之所以在StackOverflow上提出这个问题,是因为我不理解文档!我使用的是倍频程,所以如何将z转换为适当的形式?我真的不明白。我有3列x、y、z数据。trisurf可以轻松地绘制它们。我不明白是tz矩阵,或者为什么我需要为surf创建它!也许有一个倍频程函数可以创建一个合适的tz?@Manimoon surf规则说tz需要是一个矩阵而不是一个向量。在我的例子中,tz是你的tz,我重新排序,使它成为一个矩阵。@Manimoon可能是的。仔细看,我的第一行是你向量的第一部分等等。。。
tx = 1:5; % tx is a vector of length 5
ty = 2:0.5:4.5; % ty is a vector of length 6
tz = [-0.32 0.33 0.39 0.09 0.14;
      -0.19 0.13 0.15 0.24 0.33;
       0.06 0.44 0.36 0.45 0.51;
       0.72 0.79 0.98 0.47 0.55;
       0.61 0.13 0.44 0.47 0.58;
       0.85 0.   0.   0.   0.]; % tz is a matrix of size 6*5
surf(tx,ty,tz);