注意阵列大小的变化

MATLAB 中的一些常见操作(如差分积分 )输出的结果具有与输入数据不同的元素数量。这个事实很容易被忽视,这通常会导致像 Matrix dimensions must agree 这样的错误。请考虑以下示例:

t = 0:0.1:10;        % Declaring a time vector
y = sin(t);          % Declaring a function

dy_dt = diff(y);     % calculates dy/dt for y = sin(t)

假设我们想要绘制这些结果。我们来看看数组大小,看看:

size(y) is 1x101
size(t) is 1x101

但:

size(dy_dt) is 1x100

数组是一个更短的元素!

现在假设你有一段时间的位置测量数据并且想要计算 jerk(t) ,你会得到一个小于时间数组的数组 3 个元素(因为这个位置被区分 3 次)。

vel = diff(y);       % calculates velocity vel=dy/dt for y = sin(t)  size(vel)=1x100
acc = diff(vel);     % calculates acceleration acc=d(vel)/dt         size(acc)=1x99
jerk = diff(acc);    % calculates jerk jerk=d(acc)/dt                size(jerk)=1x98   

然后操作如下:

x = jerk .* t;          % multiplies jerk and t element wise

返回错误,因为矩阵尺寸不一致。

要计算上述操作,你必须调整较大的数组大小以适应较小的数组。你还可以使用数据运行回归(polyfit)以获取数据的多项式。

尺寸不匹配错误

尺寸不匹配错误通常在以下情况下出现:

  • 没注意函数/方法调用返回变量的形状。在许多内置的 MATLAB 函数中,矩阵被转换为向量以加速计算,并且返回的变量可能仍然是向量而不是我们期望的矩阵。当涉及逻辑掩蔽时,这也是常见的情况。
  • 在调用隐式数组扩展时使用不兼容的数组大小。