Alpha and beta extraction on an ellipse...
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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
0 commentaires
Réponse acceptée
Pedro Villena
le 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);
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!