Function script for Monte Carlo simulation with varying temperature

9 ビュー (過去 30 日間)
Tom Edwards
Tom Edwards 2019 年 2 月 26 日
コメント済み: Tom Edwards 2019 年 3 月 4 日
I'm writing a Monte carlo script that will simulate the canonical ensemble from statistical mechanics. I got it working and it shows some nice plots of the energy distribution and everything is as it seems, for low temperatures we have a high occurence of low energy states as hoped but now I want to create a function that runs the script many times for a range of temperatures. Below is the code. My question is can you give me some tip(s) on where to begin? I'm not very experienced with Matlab and especially not with functions. I not really sure where to begin. Thanks.
function [E] = MonteCarlo(T) % Function(Output) = function_name(input)
E_0 = 1; % Max energy state
k = 1; % Boltzmann constant
Beta = 1/(k*T); % Temperature of system
N = 1000; % Length of the sequence
E = zeros(1,N); % Initiate sequence
E(1) = rand * E_0; % Initial energy;
r = rand;
for i = 2:N
e = rand * E_0;
if e <= E(i-1)
E(i) = e;
else
if exp(-(Beta * (e-E(i-1)))) >= r
E(i) = e;
else
E(i) = E(i-1);
end
end
end
  3 件のコメント
Tom Edwards
Tom Edwards 2019 年 2 月 26 日
i want a lot of T values over a range of 2-4 magnitudes potentially.
So i can also specify that T should change in a separate loop or make it part of the function?

サインインしてコメントする。

採用された回答

Image Analyst
Image Analyst 2019 年 2 月 26 日
編集済み: Image Analyst 2019 年 2 月 27 日
OK, try this:
T = whatever, like from T=linspace(1,10000, 1000000) or T=10000*rand(1, 1000000) or whatever.
for k = 1 : length(T)
E(k) = MonteCarlo(T(k));
end
  1 件のコメント
Tom Edwards
Tom Edwards 2019 年 3 月 4 日
Ah yes, I got it now thanks!

サインインしてコメントする。

その他の回答 (0 件)

Community Treasure Hunt

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

Start Hunting!

Translated by