why do I get "Matrix dimensions must agree" when using "<"

iless={};
igreater={};
TimeVecmin={};
T1=T-60;
T2=T+60;
for i = 1:length(MiceCond)
TimeVecmin{i}=TimeVec{i}*20/1000/60;
iless{i}=TimeVecmin{i}<T & TimeVecmin{i}>T1;
igreater{i}=TimeVecmin{i}>T & TimeVecmin{i}<T2;
end
in the above code, T is the number that the user give the input, eg. 60 or 70. TimeVec is a 1*6 cell array. I can run
iless{1}=TimeVecmin{1}<T & TimeVecmin{1}>T1;
or any given number for i, but once I put it within the cycle, it shows the Matrix dimension error. How does this happen?

Réponses (3)

Orion
Orion le 21 Oct 2014
Modifié(e) : Orion le 21 Oct 2014

0 votes

Hi,
What is the length of MiceCond ?
if length(MiceCond) is more than 6 (length of TimeVec) then you're gonna get an error.

1 commentaire

Rong
Rong le 21 Oct 2014
MiceCond is a 1*6 cell array. So the length of MiceCond is 6 also.

Connectez-vous pour commenter.

Matt Tearle
Matt Tearle le 21 Oct 2014
Modifié(e) : Matt Tearle le 21 Oct 2014
Given the form of the error message and your comment that it works for a given value of i (presumably at the command line), but not in the loop (presumably running a script/function), I'm going to take a guess that somehow you're getting a different T than what you're using when you try it manually for a given i.
Can you show the code for where T comes from? Or just set a breakpoint and check what T is when the error occurs:
dbstop if error
Then run your program. When the error happens, you'll enter debug mode. Check the value of T. Then dbquit when you're done.
I'm speculating that T is a string or something like that. So it's being converted into a 2-element numeric vector, hence the error.
[Oh, and dbclear if error when you're done figuring out the problem and don't want it to stop on errors anymore :)]

2 commentaires

Rong
Rong le 21 Oct 2014
Modifié(e) : Image Analyst le 21 Oct 2014
here it is:
[fileName, pathName] = uigetfile('*.txt', 'Select the .txt file', path);
data = importdata([pathName fileName]);
T=fileName;
stimstart=input(['When was stimulation started for ', T, ' (in min)? ']);
So T is given when file is loaded. the file is txt file.
So T is a file name. Even if you try to turn that into a number somehow (which doesn't happen in the code you've shown), there are many ways for that to go horribly wrong. You should definitely examine what T is in the loop (or just before it). Either use the dbstop approach I mentioned or simply add disp(T) and/or whos T right before the loop. What do you get?
Are you sure it's not stimstart you want to be using instead of T...?

Connectez-vous pour commenter.

so T is a string (= fileName)?
and then you do
T1=T-60;
T2=T+60;
it seems that you need to convert your data.

1 commentaire

Rong
Rong le 21 Oct 2014
Thank you! But I add as T=str2num('T');
it still shows
Error using < Matrix dimensions must agree.
Error in feed20state2 (line 65) iless{i}=TimeVecmin{i}<T & TimeVecmin{i}>T1;

Connectez-vous pour commenter.

Catégories

En savoir plus sur Debugging and Analysis dans Centre d'aide et File Exchange

Question posée :

le 21 Oct 2014

Commenté :

le 21 Oct 2014

Community Treasure Hunt

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

Start Hunting!

Translated by