注意陣列大小的變化

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 函式中,矩陣被轉換為向量以加速計算,並且返回的變數可能仍然是向量而不是我們期望的矩陣。當涉及邏輯掩蔽時,這也是常見的情況。
  • 在呼叫隱式陣列擴充套件時使用不相容的陣列大小。