Filter löschen
Filter löschen

Alpha and beta extraction on an ellipse...

1 Ansicht (letzte 30 Tage)
Chris E.
Chris E. am 21 Okt. 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

Akzeptierte Antwort

Pedro Villena
Pedro Villena am 22 Okt. 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);
  1 Kommentar
Chris E.
Chris E. am 22 Okt. 2012
Thank you for the help! good way about it...

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu MATLAB finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by