Alpha and beta extraction on an ellipse...

2 views (last 30 days)
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

Accepted Answer

Pedro Villena
Pedro Villena on 22 Oct 2012
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);

More Answers (0)

Categories

Find more on MATLAB in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!