How to correct the error Matlab says i've done?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Odelia
am 16 Okt. 2013
Bearbeitet: Odelia
am 6 Nov. 2013
bsd Hello, here are the codes i'm using, Avodakodnew is the one i run, euler is needed for Avodakodnew. Here is the error i get when i try to run it:
>> Avodakodnew(5.5)
Subscripted assignment dimension mismatch.
Error in Avodakodnew (line 46) gu(i,j) = etha * ku(i,j) * diff ( u(i,j+1) - u(i,j), t ); %upper
What does this mean?
When i do >> ndims(gu), i get:
ans = 2
but if i ask for >> ndims(gu(i,j)), i get an error:
Subscript indices must either be real positive integers or logicals.
Anybody could help me to understand and correct that,please?
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 18 Okt. 2013
Your c6 is a vector or matrix but you are trying to assign it into the single location gu(i,j). Or possibly c6 is empty.
We need to know: are the "u" values symbolic or numeric? If they are symbolic then diff(c3,t) makes sense in itself, but each "gu" will be symbolic when generated. If the "u" values are numeric, then diff(c3,t) is going to ask for the "t'th" numeric difference, and since you are passing in a scalar expression, if "t" does not happen to be a positive integer you would get an error message from diff(), and if "t" does happen to be a positive integer, then the diff() of a scalar is going to be empty.
1 Kommentar
Walter Roberson
am 21 Okt. 2013
You cannot differentiate a numeric vector with respect to time. When you apply diff() to a numeric vector, you get the Difference function, not Differentiation. diff(x) with no second argument and with x numeric, means
[x(2:end) - x(1:end-1)]
It is possible that you want to know the gradient in numeric form. If so and if "t" is a vector of time values that correspond to u values, use gradient()
Weitere Antworten (6)
Andreas Goser
am 16 Okt. 2013
Bearbeitet: Andreas Goser
am 16 Okt. 2013
Could be multiple things in
etha * ku(i,j) * diff ( u(i,j+1) - u(i,j), t );
My gut feeling is you want to use .* instead of * in at least one of the operations.
2 Kommentare
Andreas Goser
am 16 Okt. 2013
I can keep on guessing like you use i and j without assigning them first and MATLAB treats them as complex numbers, but first and foremost, in order to resolve this one needs code AND data.
Jan
am 16 Okt. 2013
Bearbeitet: Jan
am 17 Okt. 2013
The problem is concealed anywhere in this line. So split the line into its parts to find out, where the problem is:
c1 = u(i,j+1);
c2 = u(i,j);
c3 = c1 - c2;
c4 = diff(c3, t);
c5 = etha * ku(i,j);
c6 = c5 * c4;
gu(i,j) = c6;
Now find out which step fails.
4 Kommentare
Image Analyst
am 18 Okt. 2013
I don't know what bsd means, but this will help http://blogs.mathworks.com/videos/2012/07/03/debugging-in-matlab/. That will definitely solve it but in case you don't want to do that, you can put these lines before that gu line:
whos i
whos j
whos c6
Siavash Kardar Tehran
am 17 Okt. 2013
firt of all make sure when you're using "for" command the vectors start their indices from 1, I mean Matlab doesn't recognize gu(0) and it must start at gu(1);
also make sure u(i,j+1) doesn't exceed you matrix dimensions.
I hope this could help.
Siehe auch
Kategorien
Mehr zu Multidimensional Arrays finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!