loop and if conditions for calculating average
2 次查看(过去 30 天)
显示 更早的评论
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 个评论
回答(1 个)
bio lim
2016-11-29
编辑:bio lim
2016-11-29
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 个评论
bio lim
2016-11-30
编辑:bio lim
2016-11-30
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.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!