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