Alpha and beta extraction on an ellipse...

조회 수: 1 (최근 30일)
Chris E.
Chris E. 2012년 10월 21일
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

채택된 답변

Pedro Villena
Pedro Villena 2012년 10월 22일
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
Chris E.
Chris E. 2012년 10월 22일
Thank you for the help! good way about it...

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Function Creation에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by