Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: Subscript indices must either be real positive integers or logicals Error + Code
Replies: 2   Last Post: Feb 21, 2013 9:42 AM

 Messages: [ Previous | Next ]
 dpb Posts: 9,850 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 says--Matlab arrays are 1-based 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 ).*(1-s) + ...
>>
>> 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
>>

> ...
>
> 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 three-argument 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 workspace--for

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.

--

Date Subject Author
2/20/13 Jerome
2/20/13 dpb
2/21/13 dpb