In the following sample. The result of the graphic is one point What is wrong here please
1 次查看(过去 30 天)
显示 更早的评论
energy = energy + deltaE;
for A = 1:nPart
th=A*L;
end
plot(energy,A,'b*')
xlabel('energy')
ylabel('( th)')
end
3 个评论
Stephen23
2018-3-18
编辑:Image Analyst
2018-3-18
thank you Image Analyst and Walter Roberson
nPart = 100; % Number of particles
density = 0.85; % Density of particles
maxDr = 0.1;
printFreq = 100;
nSteps = 500;
function [coords, L] = initCubicGrid(nPart,density)
coords = zeros(3,nPart);
L = (nPart/density)^(1.0/3);
nCube = 2;
while (nCube^3 < nPart)
nCube = nCube + 1;
end
index = [0,0,0]';
for part=1:nPart
coords(:,part) = (index+[0.5,0.5,0.5]')*(L/nCube);
index(1) = index(1) + 1;
if (index(1) == nCube)
index(1) = 0;
index(2) = index(2) + 1;
if (index(2) == nCube)
index(2) = 0;
index(3) = index(3) + 1;
end
end
end
end
energy = LJ_Energy(coords,L);
for step = 1:nSteps
if (mod(step,printFreq)==0)
step;
end
for i=1:nPart
rTrial = coords(:,i) + maxDr*(rand(3,1)-0.5);
rTrial = PBC3D(rTrial,L);
deltaE = LJ_EnergyChange(coords,rTrial,i,L);
if (rand < exp(-beta*deltaE))
coords(:,i) = rTrial;
energy = energy + deltaE;
% A= number of layers, th=thin film thickness
for A = 1:nPart
th=A*L;
figure;
plot(th,energy, 'b*'); % Plot the calculated solution
ylabel('energy');
xlabel('th');
end
end
end
end
Image Analyst
2018-3-18
Where do you call initCubicGrid() and what do you pass in for nPart and density?
回答(2 个)
Walter Roberson
2018-3-17
Each iteration of the loop, you are overwriting all of th.
But that does not matter because you do not use the value of th later.
When you use a for loop, after the loop is done, the loop variable is left at the last value it had within the loop, which would be a scalar in this case (and in most cases.) We cannot tell whether energy is a scalar or a vector, but A will be a scalar at the time of the plot()
2 个评论
Image Analyst
2018-3-17
Put these lines before that and tell us what it says
whos energy
whos th
Image Analyst
2018-3-17
Maybe you meant
for A = 1:nPart
th(A) = A * L;
end
plot(energy, th,'b*-');
grid on;
assuming both energy and th are both vectors. If energy is a single number, you'd get an error trying to plot th against it.
But we can't tell because you left out most of the code. Attach complete code if you want a complete answer.
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!