Azzera filtri
Azzera filtri

Alpha and beta extraction on an ellipse...

1 visualizzazione (ultimi 30 giorni)
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

Risposta accettata

Pedro Villena
Pedro Villena il 22 Ott 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);

Più risposte (0)

Categorie

Scopri di più su MATLAB in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by