errors with Compile?
- To: mathgroup at smc.vnet.net
- Subject: [mg27940] errors with Compile?
- From: Otto Linsuain <linsuain+ at andrew.cmu.edu>
- Date: Sat, 24 Mar 2001 15:15:45 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Dear group:
I find that when using a compiled function to define another, I often
get error messages related to the rank of the tensors involved.
Mathematica automatically switches to the uncompiled definitions and
carries out the calculations correctly, but precious time is wasted.
Here is an idea of what I am talking about:
f1=Compile[ {{x,_Real,1}}, Take[x,1] ];
f2=Compile[{{x,_Real,1}}, f1[x]^2 ];
In this case f2[ Table[Random[], {5} ] goes through smoothly. And it
should because a list of 5 numbers is a rank 1 tensor.
Now consider the slightly different situation:
f1=Compile[ {{x,_Real,1}}, Part[x,1] ]; (Notice Part instead of Take)
f2=Compile[{{x,_Real,1}}, f1[x]^2 ];
In this case, however, f2[ Table[Random[], {5} ] complains about the
rank of the argument. One can see that after the list of five numbers is
proccessed through f1 (in the second case) what comes out is a simple
number (as opposed to a simple number WITH THE HEAD List, as it was in
the first case). Now, I agree that a simple number is not a rank 1
tensor, unless it has the head List, but what was fed to f2 was a list
of five numbers, which IS a rank 1 tensor. Why should f2 go by what
comes out of f1, and not by what is fed to it? Is this a feature or a
bug?
Thanks, Otto Linsuain.
P.S. I have further found other cases where one would get an error
message either way. I mean if you feed f2 what its variable description
specifies, it complains because what returns from f1 is not
satisfactory. It you feed it a different rank tensor, so that what
returns from f1 becomes acceptable, then it complains because that is
not the rank of tensor specified in its variable description. Quite a
mess at the end of the day.