help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Any possible optimization?


From: c.
Subject: Re: Any possible optimization?
Date: Mon, 10 Jan 2011 17:03:34 +0100

On 10 Jan 2011, at 16:15, Daniel Arteaga wrote:

> Hi all
> 
> The following function is called many times in my code (always from the same 
> point), and it is actually the bottleneck of the computation:
> 
> function [s,t] = intersectionPoint(a,b,c,d)
> 
>       % Solve the system of equations
>       % (1 - s) ax + s bx = (1 - t) cx + t dx
>       % (1 - s) ay + s by = (1 - t) cy + t dy
> 
>       A = [ b(1) - a(1), c(1) - d(1); b(2) - a(2), c(2) - d(2)];
>       B = [ c(1) - a(1); c(2) - a(2)];
>       
>       v = A\B;
>       s = v(1);
>       t = v(2);
> 
> endfunction
> 
> 
> Is there any easy way to get a speed increase? Is it worth transforming it 
> into an .oct file? Or maybe including the expressions inline to avoid the 
> function call overhead?
> 
> Any suggestion is appreciated.
> 
> Thank you very much,
> 
> Daniel Arteaga
> 

Your system can be easily solved explicitely so the function can be written as:

function [s,t] = intersectionPoint2(a,b,c,d)

  aa = (b - a);
  bb = (c - d);
  cc = (c - a);
  det = (-aa(2)* bb(1) + aa(1)* bb(2));
  s   = (bb(2)* cc(1) - bb(1) *cc(2))/det;
  t   = -(aa(2)* cc(1) - aa(1) *cc(2))/det;

endfunction

which is (very slightly) faster:

>> tic, for ii=1:1e5, [s,t] = intersectionPoint2(a,b,c,d); endfor; toc
Elapsed time is 13.16 seconds.
>> tic, for ii=1:1e5, [s,t] = intersectionPoint(a,b,c,d); endfor; toc
Elapsed time is 21.2 seconds.

HTH,
c.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]