MATLAB中用Surf函数绘制三维向量时维度不匹配,如何解决?
解决MATLAB Surf函数维度不匹配问题
问题原因
surf(X,Y,Z) 对输入维度有严格要求:
- 若X、Y为向量,X的长度必须等于Z的列数,Y的长度必须等于Z的行数;
- 若X、Y为矩阵,三者必须是同尺寸的矩阵。
你的x是43×1向量,y是10×1向量,z是43×1向量,Z的行数(43)和Y的长度(10)不匹配,列数(1)和X的长度(43)也不匹配,因此触发维度错误。
解决方案
根据你的数据逻辑,分两种情况处理:
情况1:z仅与x相关,每个y值对应相同的x-z曲线
此时需要将z扩展为与网格矩阵同维度的矩阵:
% 生成x和y的网格矩阵(尺寸为10×43) [X, Y] = meshgrid(x, y); % 将43×1的z转换为1×43,再重复10行得到10×43的Z矩阵 Z = repmat(z', length(y), 1); % 绘制曲面图 surf(X, Y, Z);
情况2:每个(x_i, y_j)对应独立的z_ij值
如果原始数据缺失了部分z值,需要补充完整10×43的Z矩阵(每个位置对应(x_i,y_j)处的z值),再执行以下代码:
[X, Y] = meshgrid(x, y); % 这里的Z需是你补充好的10×43矩阵 surf(X, Y, Z);
内容的提问来源于stack exchange,提问作者Jx Knight
相关产品推荐
相关产品推荐

