Optimizing this script without using symbolic toolbox

Hi guys, this is the script which takes up all the time
function [t_sol,xi,yi] = solveIntersection(px,py,rx,ry,r)
syms t
x = px + t*rx;
y = py + t*ry;
c = x^2+y^2-r^2;
t_sol = max(double(solve(c)));
xi = double(subs(x,'t',t_sol));
yi = double(subs(y,'t',t_sol));
This script calculates the intersection of a circle and a given vektor. How do i calculate the intersection without using the symbolic toolbox? Or just how can I optimize this function?
The vector starts in (px,py) and has a direction (rx,ry). r is the radius of the circle.

 Respuesta aceptada

Andrew Newell
Andrew Newell el 28 de Abr. de 2011
If you run this code
syms t px py rx ry r
x = px + t*rx;
y = py + t*ry;
c = expand(x^2+y^2-r^2);
c = collect(c,t)
solve(c,t)
you'll get explicit equations for the two solutions for t. These can be put in the function:
function [t,xi,yi] = solveIntersectionNum(px,py,rx,ry,r)
t = [-(px*rx + py*ry + (- px^2*ry^2 + 2*px*py*rx*ry - py^2*rx^2 + r^2*rx^2 + r^2*ry^2)^(1/2))/(rx^2 + ry^2)
-(px*rx + py*ry - (- px^2*ry^2 + 2*px*py*rx*ry - py^2*rx^2 + r^2*rx^2 + r^2*ry^2)^(1/2))/(rx^2 + ry^2)];
xi = px + t*rx;
yi = py + t*ry;
It's about 100 times faster.

5 comentarios

Kasper
Kasper el 29 de Abr. de 2011
Is there anyway to do it without the copypaste of the long expression:)?
Thanks anyway I think I will use it unless something better comes up.
Apply matlabFunction() to the symbolic expression.
Why don't you want to copy and paste? Do you have more general problems in mind?
Kasper
Kasper el 29 de Abr. de 2011
Yes what if I want to analyze an ellipse instead. But I could make 2 different functions. One for ellipsis and one for circles.
A circle is a special case of an ellipse ...

Iniciar sesión para comentar.

Más respuestas (0)

Preguntada:

el 28 de Abr. de 2011

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by