Info

この質問は閉じられています。 編集または回答するには再度開いてください。

Matrix dimensions must agree error

1 回表示 (過去 30 日間)
Marius Tøndel Eliassen
Marius Tøndel Eliassen 2020 年 2 月 19 日
閉鎖済み: MATLAB Answer Bot 2021 年 8 月 20 日
I am sure I used this exact code yesterday without problems (line 27)
Matrix dimensions must agree.
Error in abs_threshold_colorationuser (line 27)
m_test(start_idx:end_idx) = m_test(start_idx:end_idx) + 10^(M.VAR/20)*y2;
Error in mpsy_check (line 208)
eval([M.EXPNAME 'user']);
Error in mpsy_afc_main (line 60)
mpsy_check;
Error in abs_threshold_coloration (line 71)
mpsy_afc_main;
Marius

回答 (1 件)

Guillaume
Guillaume 2020 年 2 月 19 日
First, do not use eval. It's not the cause for your problem here but it's a very dangerous tool which typically makes it harder to debug your code. It's also completely unneeded here,
M.([EXPNAME, 'user']); %and use , to separate expressions in [], the lack of , is also a typical source of bugs.
would work just as well.
As for the error, we don't have enough information to say what the problem is exactly, most likely the size of m_test(start_idx:end_idx) is not the same as the size of 10^(M.VAR/20)*y2 and the most likely reason for that is that y2 doesn't have end_idx-start_idx+1 elements or if it has, is not a vector. Since we don't know the size of the variables, their shape, or where they come from, we can't help you further.
  3 件のコメント
Guillaume
Guillaume 2020 年 2 月 19 日
As I said, the most likely reason is that the length of your vector y2 is not exactly equal to end_idx-start_idx+1. Certainly, the round in the calculation of start_idx and end_idx are suspicious. Are you sure you haven't got an off-by-one error?
You can always add:
assert(numel(y2) == end_idx-start_idx+1, 'Mismatch between length of y2 (%d) and calculated bounds (%d:%d = %d elements)', numel(y2), start_idx, end_idx, end_idx-start_idx+1);
before line 27 which will at least warn you of the problem but of course won't solve it.
Marius Tøndel Eliassen
Marius Tøndel Eliassen 2020 年 2 月 19 日
I (think) i know root of the problem now, but I don't know how to specify the change correctly.
For 1 number of channels the code should be:
start_idx = round((y1_dur-y2_dur)*M.FS/2)+1;
end_idx = start_idx + round(y2_dur*M.FS)-1;
and in this case end_idx equals the FS (sampling frequency), which is 44100.
For 2 number of channels end_idx much exceeds FS, and therefore result in Matrix dimension error I guess

この質問は閉じられています。

タグ

タグが未入力です。

製品


リリース

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by