Search All of the Math Forum:
Views expressed in these public forums are not endorsed by
NCTM or The Math Forum.


dpb
Posts:
9,822
Registered:
6/7/07


Re: Subscript indices must either be real positive integers or logicals Error + Code
Posted:
Feb 21, 2013 9:42 AM


On 2/20/2013 4:56 PM, dpb wrote: > On 2/20/2013 11:24 AM, Jerome wrote: >> was wondering if someone can explain to me what this error means. And, >> if possible, how to resolve it? ??? Subscript indices must either be >> real positive integers or logicals. > > Pretty much exactly what it saysMatlab arrays are 1based so all > indices have to start at (at least) one ("real positive integers" part) > or be logical indices which are an array of T,F that select the subset > within the array on that logic basis rather than by absolute position. > >> Error in ==> interp2>linear at 344 >> F = ( arg3(ndx).*(onemt) + arg3(ndx+1).*t ).*(1s) + ... >> >> Error in ==> interp2 at 220 >> zi = linear(ExtrapVal,x,y,z,xi,yi); >> >> Error in ==> snake at 71 >> ssx = gamma*xs  kappa*interp2(fx,xs,ys); >> >> This is my complete code: >> > ... > >> eext = (double(wl.*eline) + double(we.*eedge wt) .* eterm); %eext as a >> weighted sum of eline, eedge and eterm >> >> [fx, fy] = gradient(eext); %computing the gradient > ... > > Somehow you've passed an illegal set of inputs to interp2() that has > caused it to error. You can tell this by tracing back the errors to the > initiating call. I don't have time at present to try to delve deeply > into your code but the threeargument form of the call to interp2 > assumes the V (fx) here is a set of function values that match 1:M and > 1:N for the size of the array in the two dimension. I'm suspecting this > probably isn't so is the root cause that confused interp2. ...
Oh, in passing I'll note another way one can cause the above message is by accidentally aliasing a function w/ an array in the workspacefor example if you had inadvertently typed an
interp2=fx,xs,ys);
at the command line and then recalled and cleared the RHS and accidentally hit CR interp2 could be an empty array. Then a call to interp2 w/ real arguments would cause the problem. This isn't the case here as the error shows the line in the actual function; I just point it out as a fairly common error...
WRT to your actual problem, one guesses that somehow the ndx values in the expression aren't integers, maybe as a clue. You can use debug w/ break on error and inspect the expression to see what actually is getting passed to get some idea where things went wrong that may help in correcting the call.




