Asked by Chris E.
on 21 Oct 2012

I have a program I am working on that uses the "Liouville's theorem" for an ellipse, similar to the first slide of the web page, " http://www-pnp.physics.ox.ac.uk/~delerue/accelerator_option/6_emittance.pdf ".

I need to extract the alpha and beta.

I have images that come in that have the ellipse on them, I extract the x and y projections to give x and x'. This is then used to produce the alpha and beta of the image for the ellipse.

So far I have a program that does this. I'm at the point I need to make it faster and decrease the time it takes to process.

I have two questions:

Does matlab have a prebuilt function that does this already (extract data from an ellipse or alpha and beta)? (that make life easier you know!)

If not, then how can I make this code below work faster... (this is a snip of code that seems to take a bit of time to solve when it has lots of data going through it):

ParNum = 3;

NumPoints = 26;

ery = 1.0e-014 *[ 0.2081 0.2125 0.2100 0.1962 0.2213 0.2027 0.1985 0.2048 0.168 0.1859 0.1607 0.1713 0.1502 0.1421 0.1383 0.1657 0.1435 0.1365 0.1342 0.1445 0.1354 0.1394 0.1248 0.1265 0.1315 0.1396];

y = 1.0e-005 *[0.3221 0.3266 0.3240 0.3097 0.3356 0.3165 0.3121 0.3187 0.2798 0.2988 0.2711 0.2829 0.2592 0.2497 0.2453 0.2767 0.2513 0.2432 0.2404 0.2526 0.2418 0.2466 0.2290 0.2312 0.2372 0.2468];

x = [-0.8327 -0.7981 -0.7636 -0.7290 -0.6944 -0.6598 -0.6252 -0.5906 -0.5560 -0.5214 -0.4868 -0.4522 -0.4177 -0.3831 -0.3485 -0.3139 -0.2793 -0.2447 -0.2101 -0.1755 -0.1409 -0.1063 -0.0718 -0.0372 -0.0026 0.0320];

for k=1:ParNum

for i=1:NumPoints

f(k)=power(x(i),k-1);

beta_element(k,i)=y(i)*f(k)/(ery(i)*ery(i));

beta(k)=sum(beta_element(k,:));

end

end

for k=1:ParNum

for l=1:ParNum

for i=1:NumPoints

f(k)=power(x(i),k-1);

f(l)=power(x(i),l-1);

alpha_element(k,l,i)=f(k)*f(l)/(ery(i)*ery(i));

alpha(k,l)=sum(alpha_element(k,l,:));

end

end

end

Here is the output of alpha and beta...

K>> alpha

alpha =

1.0e+031 *

1.0549 -0.3348 0.1687

-0.3348 0.1687 -0.0997

0.1687 -0.0997 0.0646

K>> beta

beta =

1.0e+025 *

2.7766 -0.9531 0.5016

Any help or advice on this matter is much appreciated!

Thank you,

Chris

Answer by Pedro Villena
on 22 Oct 2012

Accepted answer

beta_element = zeros(ParNum,NumPoints); beta_factor = y./(ery.^2); alpha_element = zeros(ParNum,ParNum,NumPoints); for k = 1:ParNum, f = x.^(k-1); beta_element(k,:) = beta_factor.*f; alpha_factor = f./(ery.^2); for l=1:ParNum, alpha_element(k,l,:) = alpha_factor.*x.^(l-1); end end beta = sum(beta_element,2)'; alpha = sum(alpha_element,3);

Related Content

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
## 0 Comments

Log in to comment.