Info

Diese Frage ist geschlossen. Öffnen Sie sie erneut, um sie zu bearbeiten oder zu beantworten.

Matrix dimensions must agree error

1 Ansicht (letzte 30 Tage)
Marius Tøndel Eliassen
Marius Tøndel Eliassen am 19 Feb. 2020
Geschlossen: MATLAB Answer Bot am 20 Aug. 2021
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

Antworten (1)

Guillaume
Guillaume am 19 Feb. 2020
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 Kommentare
Guillaume
Guillaume am 19 Feb. 2020
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 am 19 Feb. 2020
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

Diese Frage ist geschlossen.

Tags

Noch keine Tags eingegeben.

Produkte


Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by