如何解决MATLAB/Octave绘制指定分式函数时维度不匹配报错问题
问题原因
你出现维度不匹配报错的核心原因有两个:
- 没有将两个自变量
y和phi转换为网格矩阵,直接对两个一维行向量做跨元素的乘法运算不符合MATLAB/Octave的矩阵运算规则 - 逐元素的乘法、除法运算需要使用带点的运算符
.*、./,默认的*、/是矩阵乘法和矩阵除法,不符合标量函数的逐元素计算要求
解决代码
% 定义自变量范围 y = -16:0.5:16; phi = linspace(0,4*pi,65); % 生成二维网格矩阵,方便逐元素计算二元函数 [Y, PHI] = meshgrid(y, phi); % 计算分子分母,所有乘除都用逐元素运算符 a = (pi - 2*PHI).*(1 + 2*Y.^2) + sin(2*PHI) - 8*Y.*cos(PHI); b = (pi - 2*PHI) + sin(2*PHI) - 4*Y.*cos(PHI); % 逐元素做除法得到函数值 c = a ./ b; % 绘图示例:三维曲面 figure; surf(Y, PHI, c); xlabel('y'); ylabel('phi'); zlabel('n'); shading interp;
额外说明
- 如果需要固定其中一个变量,把函数作为另一个变量的一元函数绘制,只需要固定某一个变量为标量,不需要调用meshgrid,只要保证所有逐元素运算都使用点运算符即可
- 计算时注意分母b可能出现为0的奇点,绘图时MATLAB/Octave会自动把这些位置显示为NaN,不会影响整体图像效果
内容的提问来源于stack exchange,提问作者Moone Lenno Presto
相关产品推荐
相关产品推荐

