loop and if conditions for calculating average
1 view (last 30 days)
Show older comments
I was trying to use if condition in the program below to assign all values of deltaE that are less than zero to Ev adn their corresponding E values then print out the acceptance counter It doesnt work can any one review and update the program if possible ? please check the algorithm below
clc,clear
format shortG
E=0;accept=0;
step=1;
xv=0;
m_trials=100;
counter=1;
xi=100; %set at each temperature the initial coordinate value x to 100.
kc=0.1;kb=1; %Constants
dx=10; %Set maximum positiondisplacement during MC move
Temp=0;
% while (counter < m_trials )
for counter=1:m_trials
counter=counter+1;
d(counter+1)=(rand()-0.5)*dx; %For each particle picking a random displacement
xv(counter+1)=d(counter)+xi;
E(counter+1)=kc*xv(counter).^2
deltaE(counter+1)=E(counter+1)-E(counter)
Temp=Temp+0.1;
if deltaE<0
Ev=deltaE
p = exp(-deltaE/Temp)
disp('Accept the new configuration')
accept = accept+1
break;
else
disp('Rject the new Configuration')
end
step=step+1;
E=sum(E)/m_trials
end
0 Comments
Answers (1)
bio lim
on 29 Nov 2016
Edited: bio lim
on 29 Nov 2016
First of all, you are missing end to your for loop. Also, you don't need break in your if statement.
Fixing those two, I am getting output of:
Rject the new Configuration
E =
10.644
2 Comments
bio lim
on 30 Nov 2016
Edited: bio lim
on 30 Nov 2016
Correct me if I'm wrong, but I am assuming you are talking about the two variables DeltaE and E.
If you take a look at:
E=sum(E)/m_trials
it is defined inside the loop. Which means, at every iteration, i.e.,
for counter=1:m_trials
the value for E is going to be changed. As for DeltaE, I see no problem.
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!