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]