       Re: Compile a Module

• To: mathgroup at smc.vnet.net
• Subject: [mg83191] Re: [mg83148] Compile a Module
• From: DrMajorBob <drmajorbob at bigfoot.com>
• Date: Wed, 14 Nov 2007 04:50:30 -0500 (EST)
• References: <11952552.1194997018464.JavaMail.root@m35>

```The following may be of help:

Clear[brute, better]
brute[{tip_, end_, calc_}] := Module[{mid, r, theta, along, away},
mid = (tip + end)/2;
r = Sqrt[Dot[calc - mid, calc - mid]];
theta = VectorAngle[calc - mid, end - mid];
along = r Cos[theta];
away = r Sin[theta];
{along, away}]

brute[{tip,end,calc}]/.VectorAngle[a_,b_]:>ArcCos[a.b/Sqrt[a.a
b.b]]//Simplify;
%/.{-(tip/2)+calc-end/2->u,end->2v+tip}//Simplify//PowerExpand

{u.v/Sqrt[v.v],Sqrt[u.u] Sqrt[1-(u.v)^2/(u.u v.v)]}

better[{tip_,end_,calc_}]:=Module[{u=calc-(tip+end)/2,v=(end-tip)/2,w},w=u.v/Sqrt[v.v];{w,  =

Sqrt[u.u-w^2]}]

It's not compiled, but it does cut computations to a minimum, or nearly so.

Bobby

On Tue, 13 Nov 2007 02:35:52 -0600, JOHN ERB <john_c_erb at prodigy.net>
wrote:

> Can the following module be compiled?
>   It needs to be used 10^4 times in my program.
>   It is used to calculate the distance parallel and perpendicular
>   to the midpoint of  2D line segment with reference to a point of
> interest (calc).
>  AlongAway[{tip_,end_,calc_}]:=Module[{mid,r,theta,along,away},
> mid=(tip+end)/2;
> r=Sqrt[Dot[calc-mid,calc-mid]];
> theta=VectorAngle[calc-mid,end-mid];
> along=r Cos[theta];
> away=r Sin[theta];
> {along,away}]
>  AlongAway[{{-1, 0}, {1, 0}, {2, 1}}]
> (* answer is {2,1} *)
>  (* the code below does not seem to work *)
>   cAlongAway=Compile[{{tip,_Real},{end,_Real},{calc,_Real}},AlongAway]
>  John C. Erb
>
>

--

DrMajorBob at bigfoot.com

```

• Prev by Date: Re: Partial Differentiation of Implicit Functions
• Next by Date: Re: Re: Dividers formatting in Grid
• Previous by thread: Re: Compile a Module
• Next by thread: Re: Compile a Module