script wont run seems to be stuck in while loop

I cant find out what is wrong with this script. Can anyone help out?
x=10^(-7);
count=0;
alp=1.24*10^(-10);
dx=10^(-9);
SIG0=0;
SIG1=0;
SIG2=0;
SIG3=0;
SIG4=0;
SIG5=0;
SIG6=0;
SIG7=0;
SIG8=0;
SIG9=0;
for i=1:9
n=i-1;
No=67465.6113/(2^(n/2)*(factorial(n))^(0.5));
while x>(-1.91*10^(-8)*(n+0.5)) && x<(1.91*10^(-8)*(n+0.5))
if n==0
SIG0=SIG0+(No^2)*(10^(-x^2/(2*alp^2)))^2*dx
elseif n==1
SIG1=SIG1+(No^2)*(2*x/alp)^2*(10^(-x^2/(2*alp^2)))^2*dx;
elseif n==2
SIG2=SIG2+(No^2)*(4*(x/alp)^2-2)^2*(10^(-x^2/(2*alp^2)))^2*dx;
count=count+1;
elseif n==3
SIG3=SIG3+(No^2)*(8*(x/alp)^3-12*(x/alp))^2*(10^(-x^2/(2*alp^2)))^2*dx;
elseif n==4
SIG4=SIG4+(No^2)*(16*(x/alp)^4-48*(x/alp)^2+12)^2*(10^(-x^2/(2*alp^2)))^2*dx;
elseif n==5
SIG5=SIG5+(No^2)*(32*(x/alp)^5-160*(x/alp)^3+120*(x/alp))^2*(10^(-x^2/(2*alp^2)))^2*dx;
elseif n==6
SIG6=SIG6+(No^2)*(64*(x/alp)^6-480*(x/alp)^4+720*(x/alp)^2-120)^2*(10^(-x^2/(2*alp^2)))^2*dx;
elseif n==7
SIG7=SIG7+(No^2)*(128*(x/alp)^7-1344*(x/alp)^5+3360*(x/alp)^3-1680*(x/alp))^2*(10^(-x^2/(2*alp^2)))^2*dx;
elseif n==8
SIG8=SIG8+(No^2)*(256*(x/alp)^8-3584*(x/alp)^6+13440*(x/alp)^4-13440*(x/alp)^2+1680)^2*(10^(-x^2/(2*alp^2)))^2*dx;
elseif n==9
SIG9=SIG9+(No^2)*(512*(x/alp)^9-9216*(x/alp)^7+48384*(x/alp)^5-80640*(x/alp)^3+30240*(x/alp))^2*(10^(-x^2/(2*alp^2)))^2*dx;
end
x=x+dx;
end
end
SIG0;
SIG1;
SIG2,
SIG3;
SIG4;
SIG5;
SIG6;
SIG7;
SIG8;
SIG9;
count

답변 (1개)

Adam
Adam 2016년 2월 26일

0 개 추천

Well, you know your own code domain and what it is supposed to do better than anyone. It is too detailed for me to just glance at and understand clearly what is intended, but if you say it remains in the loop infinitely then clearly:
x>(-1.91*10^(-8)*(n+0.5)) && x<(1.91*10^(-8)*(n+0.5))
is always evaluating to true.
Now that I look at the body of your while loop neither x nor n is changing in any of the branches of the loop so if the code ends up in the first place due to the above statement evaluating to true then the statement will always evaluate to true so far as I can see.
You are changing things within the while loop that have no impact on the condition against which the while loop is being tested.

댓글 수: 2

torgny
torgny 2016년 2월 26일
Thanks I have managed to run through the script however it does not seem like they g o into the elseif
torgny
torgny 2016년 2월 26일
편집: torgny 2016년 2월 26일
I have updated the script. Thanks! Thanks for the first help Adam!

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

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

태그

질문:

2016년 2월 26일

편집:

2016년 2월 26일

Community Treasure Hunt

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

Start Hunting!

Translated by