2017-09-20 2 views
-4

Ich habe dieses Stück Code, den ich versuche zu verstehen, was los ist.Was macht diese if-Anweisung?

Also kann mir jemand sagen, was diese if-Anweisung in Mathe tut?

prob = exp(-dE/kT); 

if dE <= 0 I I rand() <= prob; 

spin(row, col) = - spin(row, col); 
+0

die I's sind Bars. Anders als das sollte gut sein nein? Es ist nicht mein Programm, aber es läuft. Natürlich fehlt auch ein Ende. – user469216

Antwort

3

Das ist keine gültige MATLAB-Syntax. Also, was es tut, gibt Ihnen einen Syntaxfehler. Sie meinten wahrscheinlich

prob = exp(-dE/kT); 
if dE <= 0 || rand() <= prob 
    spin(row, col) = - spin(row, col); 
end 

, die Ihnen eine Wahrscheinlichkeit auf einer Exponentialfunktion (die Boltzmann-Verteilung) und wenn Ihre Energieänderung basiert gibt, dE, kleiner als oder gleich Null ist (also Energie verloren) , oder ist Ihre Wahrscheinlichkeit höher oder gleich einer zufällig generierten Zahl zwischen 0 und 1, wird der Spin an der Stelle (row,col) in Ihrer Matrix invertiert, dh mit -1 multipliziert.

+5

@obchardon es ist nicht sehr höflich oder nützlich, jemandes Antwort zu bearbeiten, nur um etwas zu entfernen, das keine Wirkung hat. Ich könnte den Code von Adriaan bearbeiten und alle Leerzeichen entfernen, weil sie ebenfalls nutzlos sind, aber es gibt keinen Grund dafür ... Das OP hatte ein Semikolon in seinen Code eingefügt, so dass diese Antwort das für Kontinuität konservierte. – Wolfie

+1

@Wolfie Meiner Meinung nach ist es nützlich, eine Kontinuität in einer Code-Syntax zu bewahren, um Dinge klar zu machen. Es vermeidet, dass Menschen eine schlechte Angewohnheit haben. Es war keineswegs unhöflich. – obchardon