[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.