Problem mit 2Dimensionalem Array

  • Heyho liebe Community,

    bevor ich hier mein Problem schildere, kurz mal etwas zu mir selber (ist ja schließlich mein erster Post hier :) ).
    Ich bin ein Gelegenheits-AutoIT-Benutzer. Kein blutiger Anfänger, aber in die gute Mittelschicht werde ich mich glaube ich noch nicht ansiedeln können, von daher bitte ich um Verständnis wenn die Lösung für mein Problem (oftmals) ziemlich naheliegend sein kann/wird.
    Nun zu meinem Problem.
    Ich schreibe ein kleines Skript zum Ising Modell (hat etwas mit Ferromagnetismus zu tun, vielleicht weiß ja jemand von euch was ich damit meine/kennt das Modell :) ) und bin jetzt eigentlich fertig.
    Jetzt kommt das große Aber:

    Ich möchte die Spin-Kette (welche durch nebeneinander stehende Zahlen repräsentiert wird, wie gerufen für ein Array eigentlich..) nun auch untereinander darstellen... Also seitlich die örtliche Verschiebung, nach unten hin letzten Endes die Zeitliche Veränderung.. ist irgendwie blöd zu erklären, ich probier es mal so:

    Die Kette/das Array sieht so aus:

    -1 1 1 1 -1 -1 -1 -1 1 1 1 -1 -1 1 1 also 15 Zahlen nebeneinander. Nun finden Berechnungen statt, und ich will dadrunter( damit es besser zu vergleichen ist) dann die zeitliche Veränderung vermerken. Das sollte dann so aussehen.

    -1 1 1 1 -1 -1 -1 -1 1 1 1 -1 -1 1 1
    1 -1 -1 -1 1 -1 usw.
    -1 1 1 1 -1 -1 usw. damit man die Ergebnisse besser vergleichen kann.

    Ich habe bereits einen Ansatz, aber der Vorgang wird lediglich nur einmal ausgeführt, also die ersten zwei "Zeilen" beschrieben, die restlichen bleiben unbeschrieben (zumindest zu sehen bei _ArrayDispay)

    Hier ein Bild, falls ich zu verwirrend beschreibe was ich nicht hinkriege :P
    [Blockierte Grafik: http://www.bilder-upload.eu/upload/0c700a-1332629850.png
    Den Code hier reinzuschreiben wäre glaube ich ein wenig zu viel... bei Nachfrage mache ich das aber :S

    Oh je, ich hoffe das ist nicht zuviel für's erste >_>

    MfG

  • Moin, willkommen im Forum!

    Es würde schon helfen, wenn du deinen Code möglichst vollständig zeigst. Solange du dich um die eigentliche Berechnung kümmerst (vom Ising-Modell habe ich noch nie was gehört), dürfte die Programmierung drum herum leicht fertigzustellen sein.

    Pack deinen Code in [spoiler‌]- und [autoit‌]-Tags, also so: [spoiler‌][autoit‌];Dein Code hier[/‌autoit][/‌spoiler]
    Das sieht dann so aus:

    Spoiler anzeigen
    [autoit]

    ;Dein Code hier

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Spoiler anzeigen
    [autoit]


    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $Spin_Anzahl = InputBox("Simulation","Bitte die Breite des Gitters angeben!")
    const $Temperatur = InputBox("Simulation", "Bitte die Temperatur eingeben") + 273.15
    Global $DurchlaufAnzahl = InputBox("Simulation","Wie oft sollen die Spins auf ihre Flip Wahrscheinlichkeit überprüft werden?")
    Global $Spin[$DurchlaufAnzahl][$Spin_Anzahl]
    Global $Schleifenvariable = 0
    Global $Schleifenvariable2 = 0
    Const $J = InputBox("Simulation", "Bitte J deklarieren!")
    Global $Energie_Delta = 0
    Global $Energie_alt = 0
    Global $Energie_neu = 0
    Global $Lattice_Position = 0
    Global $ZufallsZahl = 0
    const $kB = 1.28 * 10^-23
    Global $dummy = 0
    ;=====================================================================
    ; Ende der Initialisierung...
    ; Anfang der Energievergabe
    ;=====================================================================

    [/autoit] [autoit][/autoit] [autoit]

    While $Schleifenvariable < $Spin_Anzahl
    $Spin[0][$Schleifenvariable] = Random(-1,1,1)
    While $Spin[0][$Schleifenvariable] = 0
    $Spin[0][$Schleifenvariable] = Random(-1,1,1)
    WEnd
    $Schleifenvariable= $Schleifenvariable +1
    WEnd
    $Schleifenvariable = 0
    _ArrayDisplay($Spin, "Anfang")

    [/autoit] [autoit][/autoit] [autoit]

    While $Durchlaufanzahl > 0
    While $Schleifenvariable < $Spin_Anzahl - 1
    ;=====================================================================
    ; Ende der Energievergabe
    ; Anfang der Energieberechnung ($Energie_alt)
    ;=====================================================================
    While $Lattice_Position < $Spin_Anzahl -1

    If $Lattice_Position = 0 Then
    $Energie_alt = $Energie_alt + ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position+1])
    $Lattice_Position = $Lattice_Position+1
    EndIf

    $Energie_alt = $Energie_alt+ ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position+1] + $Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position-1])
    $Lattice_Position = $Lattice_Position + 1

    If $Lattice_Position = $Spin_Anzahl - 1 Then
    $Energie_alt = $Energie_alt + ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position-1])
    EndIf

    WEnd
    ;=====================================================================
    ; Ende der Energieberechnung ($Energie_alt)
    ; Anfang der Energieberechnung ($Energie_neu)
    ;=====================================================================
    $Lattice_Position = 0
    $Spin[$dummy][$Schleifenvariable] = - $Spin[$dummy][$Schleifenvariable]
    While $Lattice_Position < $Spin_Anzahl -1

    [/autoit] [autoit][/autoit] [autoit]

    If $Lattice_Position = 0 Then
    $Energie_neu = $Energie_neu + ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position+1])
    $Lattice_Position = $Lattice_Position+1
    EndIf

    $Energie_neu = $Energie_neu + ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position+1] + $Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position-1])
    $Lattice_Position = $Lattice_Position + 1

    [/autoit] [autoit][/autoit] [autoit]

    If $Lattice_Position = $Spin_Anzahl - 1 Then
    $Energie_neu = $Energie_neu + ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position-1])
    EndIf

    WEnd
    ;=====================================================================
    ; Ende der Energieberechnung ($Energie_neu)
    ; Anfang der Wahrscheinlichkeitsberechnung und Durchführung des Flips
    ;=====================================================================
    $Energie_Delta =$Energie_neu - $Energie_alt
    $ZufallsZahl = Random(0,1)

    [/autoit] [autoit][/autoit] [autoit]

    If $ZufallsZahl < Exp(-$Energie_Delta / ($kB*$Temperatur)) Then
    $Spin[$dummy][$Schleifenvariable] = - $Spin[$dummy][$Schleifenvariable]
    EndIf
    ;=====================================================================
    ; Ende der Wahrscheinlichkeitsberechnung und Durchführung des Flips
    ; Zurücksetzen der Variablen, $Schleifenvariable ++1
    ;=====================================================================
    $Schleifenvariable = $Schleifenvariable + 1
    $Energie_alt = 0
    $Energie_neu = 0
    $Lattice_Position = 0
    WEnd
    while $Schleifenvariable2 < $Spin_Anzahl
    $Spin[$dummy+1][$Schleifenvariable2]= $Spin[$dummy][$Schleifenvariable2]
    $Schleifenvariable2 = $Schleifenvariable2 +1
    wend
    $Schleifenvariable2 = 0

    $DurchlaufAnzahl = $DurchlaufAnzahl - 1
    _ArrayDisplay($Spin, "Simulation")
    wend
    ;=====================================================================
    ; Beenden der Simulation
    ; Ausgabe der End-Konstellation
    ;=====================================================================
    ToolTip("Die Simulation ist zu ende", 0, 0)
    _ArrayDisplay($Spin, "Ende")

    [/autoit]

    So... $dummy soll die Variable sein, auf die das Hauptaugenmerkt geworfen werden sollte... ich habe bereits überprüft ob die Schleife nur einmal durchlaufen wird, was sie eigentlich nicht sollte... sie wird mehrfach durchlaufen.
    Bitte kleinere Fehler in Logik ect. nicht beachten :D

    achja, $dummy ist von Anfang an = 0, die Durchlaufanzahl wird per Input angegeben..
    Hoffentlich findet ihr da einen Fehler (garantiert :whistling: )

    MfG

  • Okay, etwas unübersichtlich, ich habe den Code erstmal durch die überwiegende Verwendung von For-Schleifen etwas aufgeräumt:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $Spin_Anzahl = InputBox("Simulation","Bitte die Breite des Gitters angeben!")
    const $Temperatur = InputBox("Simulation", "Bitte die Temperatur eingeben") + 273.15
    Global $DurchlaufAnzahl = InputBox("Simulation","Wie oft sollen die Spins auf ihre Flip Wahrscheinlichkeit überprüft werden?")
    Global $Spin[$DurchlaufAnzahl][$Spin_Anzahl]
    Const $J = InputBox("Simulation", "Bitte J deklarieren!")
    Global $Energie_Delta = 0
    Global $Energie_alt = 0
    Global $Energie_neu = 0
    Global $Lattice_Position = 0
    Global $ZufallsZahl = 0
    const $kB = 1.28 * 10^-23
    Global $dummy = 0
    ;=====================================================================
    ; Ende der Initialisierung...
    ; Anfang der Energievergabe
    ;=====================================================================

    [/autoit] [autoit][/autoit] [autoit]

    For $Schleifenvariable= 0 To $Spin_Anzahl-1
    $Spin[0][$Schleifenvariable] = Random(0,1,1)*2-1
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($Spin, "Anfang")

    [/autoit] [autoit][/autoit] [autoit]

    For $i = $Durchlaufanzahl To 1 Step -1
    For $Schleifenvariable= 0 To $Spin_Anzahl - 2
    ;=====================================================================
    ; Ende der Energievergabe
    ; Anfang der Energieberechnung ($Energie_alt)
    ;=====================================================================
    While $Lattice_Position < $Spin_Anzahl -1

    [/autoit] [autoit][/autoit] [autoit]

    If $Lattice_Position = 0 Then
    $Energie_alt = $Energie_alt + ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position+1])
    $Lattice_Position = $Lattice_Position+1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $Energie_alt = $Energie_alt+ ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position+1] + $Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position-1])
    $Lattice_Position = $Lattice_Position + 1

    [/autoit] [autoit][/autoit] [autoit]

    If $Lattice_Position = $Spin_Anzahl - 1 Then
    $Energie_alt = $Energie_alt + ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position-1])
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    WEnd
    ;=====================================================================
    ; Ende der Energieberechnung ($Energie_alt)
    ; Anfang der Energieberechnung ($Energie_neu)
    ;=====================================================================
    $Lattice_Position = 0
    $Spin[$dummy][$Schleifenvariable] = - $Spin[$dummy][$Schleifenvariable]
    While $Lattice_Position < $Spin_Anzahl -1

    [/autoit] [autoit][/autoit] [autoit]

    If $Lattice_Position = 0 Then
    $Energie_neu = $Energie_neu + ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position+1])
    $Lattice_Position = $Lattice_Position+1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $Energie_neu = $Energie_neu + ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position+1] + $Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position-1])
    $Lattice_Position = $Lattice_Position + 1

    [/autoit] [autoit][/autoit] [autoit]

    If $Lattice_Position = $Spin_Anzahl - 1 Then
    $Energie_neu = $Energie_neu + ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position-1])
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    WEnd
    ;=====================================================================
    ; Ende der Energieberechnung ($Energie_neu)
    ; Anfang der Wahrscheinlichkeitsberechnung und Durchführung des Flips
    ;=====================================================================
    $Energie_Delta =$Energie_neu - $Energie_alt
    $ZufallsZahl = Random(0,1)

    [/autoit] [autoit][/autoit] [autoit]

    If $ZufallsZahl < Exp(-$Energie_Delta / ($kB*$Temperatur)) Then
    $Spin[$dummy][$Schleifenvariable] = - $Spin[$dummy][$Schleifenvariable]
    EndIf
    ;=====================================================================
    ; Ende der Wahrscheinlichkeitsberechnung und Durchführung des Flips
    ; Zurücksetzen der Variablen, $Schleifenvariable ++1
    ;=====================================================================
    $Energie_alt = 0
    $Energie_neu = 0
    $Lattice_Position = 0
    Next
    For $Schleifenvariable2 = 0 To $Spin_Anzahl -1
    $Spin[$dummy+1][$Schleifenvariable2]= $Spin[$dummy][$Schleifenvariable2]
    Next
    _ArrayDisplay($Spin, "Simulation")
    Next
    ;=====================================================================
    ; Beenden der Simulation
    ; Ausgabe der End-Konstellation
    ;=====================================================================
    ToolTip("Die Simulation ist zu ende", 0, 0)
    _ArrayDisplay($Spin, "Ende")

    [/autoit]

    Jetzt guck ich mir den Code mal im Detail an

    edit: müsste die Zeile im Array durch den aktuellen Durchlauf bestimmt werden?

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Jetzt wo ich darüber nachdenke, wäre das ja mehr als logisch... In meinem Fall habe ich ja die Dummy Variable verwendet, wobei das mit dem Durchlauf besser wäre.. Hm.

    MfG

  • Jetzt wo ich darüber nachdenke, wäre das ja mehr als logisch... In meinem Fall habe ich ja die Dummy Variable verwendet, wobei das mit dem Durchlauf besser wäre.. Hm.


    Müsstest du da nicht die Variable auch erhöhen, z.B. so:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $Spin_Anzahl = InputBox("Simulation","Bitte die Breite des Gitters angeben!")
    const $Temperatur = InputBox("Simulation", "Bitte die Temperatur eingeben") + 273.15
    Global $DurchlaufAnzahl = InputBox("Simulation","Wie oft sollen die Spins auf ihre Flip Wahrscheinlichkeit überprüft werden?")
    Global $Spin[$DurchlaufAnzahl][$Spin_Anzahl]
    Const $J = InputBox("Simulation", "Bitte J deklarieren!")
    Global $Energie_Delta = 0
    Global $Energie_alt = 0
    Global $Energie_neu = 0
    Global $Lattice_Position = 0
    Global $ZufallsZahl = 0
    const $kB = 1.28 * 10^-23
    Global $dummy = 0
    ;=====================================================================
    ; Ende der Initialisierung...
    ; Anfang der Energievergabe
    ;=====================================================================

    [/autoit] [autoit][/autoit] [autoit]

    For $Schleifenvariable= 0 To $Spin_Anzahl-1
    $Spin[0][$Schleifenvariable] = Random(0,1,1)*2-1
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($Spin, "Anfang")

    [/autoit] [autoit][/autoit] [autoit]

    For $i = $Durchlaufanzahl To 1 Step -1
    For $Schleifenvariable= 0 To $Spin_Anzahl - 2
    ;=====================================================================
    ; Ende der Energievergabe
    ; Anfang der Energieberechnung ($Energie_alt)
    ;=====================================================================
    While $Lattice_Position < $Spin_Anzahl -1

    [/autoit] [autoit][/autoit] [autoit]

    If $Lattice_Position = 0 Then
    $Energie_alt = $Energie_alt + ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position+1])
    $Lattice_Position = $Lattice_Position+1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $Energie_alt = $Energie_alt+ ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position+1] + $Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position-1])
    $Lattice_Position = $Lattice_Position + 1

    [/autoit] [autoit][/autoit] [autoit]

    If $Lattice_Position = $Spin_Anzahl - 1 Then
    $Energie_alt = $Energie_alt + ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position-1])
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    WEnd
    ;=====================================================================
    ; Ende der Energieberechnung ($Energie_alt)
    ; Anfang der Energieberechnung ($Energie_neu)
    ;=====================================================================
    $Lattice_Position = 0
    $Spin[$dummy][$Schleifenvariable] = - $Spin[$dummy][$Schleifenvariable]
    While $Lattice_Position < $Spin_Anzahl -1

    [/autoit] [autoit][/autoit] [autoit]

    If $Lattice_Position = 0 Then
    $Energie_neu = $Energie_neu + ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position+1])
    $Lattice_Position = $Lattice_Position+1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $Energie_neu = $Energie_neu + ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position+1] + $Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position-1])
    $Lattice_Position = $Lattice_Position + 1

    [/autoit] [autoit][/autoit] [autoit]

    If $Lattice_Position = $Spin_Anzahl - 1 Then
    $Energie_neu = $Energie_neu + ($Spin[$dummy][$Lattice_Position]*$Spin[$dummy][$Lattice_Position-1])
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    WEnd
    ;=====================================================================
    ; Ende der Energieberechnung ($Energie_neu)
    ; Anfang der Wahrscheinlichkeitsberechnung und Durchführung des Flips
    ;=====================================================================
    $Energie_Delta =$Energie_neu - $Energie_alt
    $ZufallsZahl = Random(0,1)

    [/autoit] [autoit][/autoit] [autoit]

    If $ZufallsZahl < Exp(-$Energie_Delta / ($kB*$Temperatur)) Then
    $Spin[$dummy][$Schleifenvariable] = - $Spin[$dummy][$Schleifenvariable]
    EndIf
    ;=====================================================================
    ; Ende der Wahrscheinlichkeitsberechnung und Durchführung des Flips
    ; Zurücksetzen der Variablen, $Schleifenvariable ++1
    ;=====================================================================
    $Energie_alt = 0
    $Energie_neu = 0
    $Lattice_Position = 0
    Next
    For $Schleifenvariable2 = 0 To $Spin_Anzahl -1
    $Spin[$dummy+1][$Schleifenvariable2]= $Spin[$dummy][$Schleifenvariable2]
    Next
    _ArrayDisplay($Spin, "Simulation")
    $dummy += 1
    Next
    ;=====================================================================
    ; Beenden der Simulation
    ; Ausgabe der End-Konstellation
    ;=====================================================================
    ToolTip("Die Simulation ist zu ende", 0, 0)
    _ArrayDisplay($Spin, "Ende")

    [/autoit]


    ?

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • So. Ich habe mir das mal angeguckt und ausprobiert so wie Du das jetzt gemacht hast. Es funktioniert irgendwie so halb. So wird die zweite Zeile ausgespuckt, jedoch wird die erste Zeile überschrieben. Dann wird die zweite Zeile nur noch in die anderen Zeilen kopiert (es ist keine Änderung zu sehen), aber immerhin werden jetzt mehr als zwei Zeilen angezeigt :P
    Jedoch wird nun in Zeile 87 eine Fehlermeldung angezeigt, nachdem die letzte Zeile erreicht worden ist.

    (87) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

    Hat wohl irgendwie mit dem hier: $Spin[$dummy+1][$Schleifenvariable2]= $Spin[$dummy][$Schleifenvariable2] zu tun. dummy+1 ist wohl out of bounds... Ich habe das ganz unkonventionell (so wie ich halt bin :P) hierdurch gelöst:

    [autoit]

    Global $Spin[$DurchlaufAnzahl][$Spin_Anzahl]

    [/autoit]

    ändern zu

    [autoit]

    Global $Spin[$DurchlaufAnzahl+1][$Spin_Anzahl]

    [/autoit]

    Jetzt wüsste ich halt gerne, warum die erste Zeile überschrieben wird :o
    Ich bedanke mich hier nochmal für die Hilfe und werde mich jetzt nochmal dem Problem widmen :thumbup:

    MfG

    dit:
    - Gut gelöst!

    [autoit]

    For $Schleifenvariable= 0 To $Spin_Anzahl-1
    $Spin[0][$Schleifenvariable] = Random(0,1,1)*2-1
    Next

    [/autoit]

    Wäre ich bestimmt nicht drauf gekommen ;)

    - Sehe ich das in Zeile 27 richtig?

    [autoit]

    For $Schleifenvariable= 0 To $Spin_Anzahl - 2

    [/autoit]

    warum denn -2? Wird da nicht letzten Endes jeder zweite Spin übersehen?

    dit2: Gut. Ich habe das Gefühl dass der da nicht die Zeilen kopiert, sondern dass da nichts verändert wird, weil das System den energetisch günstigsten Zustand erreicht hat.... komisch. Das geht innerhalb eines Durchgangs? Habe ich aber irgendwie anders in Erinnerung... muss ich mal überprüfen 8|

    2 Mal editiert, zuletzt von Salpredated (27. März 2012 um 18:51)


  • Weiß ich nicht, ich habe das nur von dir übernommen, damals war es While $variable < $endwert - 1
    Das ist semantisch equivalent mit For $variable = 0 To $endwert - 2

    Ah, ich dachte da stand Step -2 . Habe mich verlesen :)
    Tut mir leid für das Missverständnis.
    Besteht eigentlich irgendwie die Möglichkeit zu überprüfen, ob das Programm da jetzt richtig rechnet? Weil der halt nach dem ersten Durchgang wie schon beschrieben nichts mehr ändert... Theoretisch sollte das ja nicht sein :o

    MfG

  • Gut. Es geht letzten Endes um die Realisierung eines Modells.
    Dabei wird:

    - Ein Spin (ein Elektron in einem Ferromagneten, welcher nach oben oder unten zeigt, mit verschiedenen Energien) ausgesucht
    - Geguckt was passiert, wenn dieser seine Energie umkehrt (von -1 zu 1 zum Beispiel)
    - Eine Warhscheinlichkeit aufgrund eben dieses Ereignisses ausgerechnet und dann ggf. ausgeführt
    - Einen Spin weitergerückt

    Wenn man alle Spins, die im Ferromagneten sind, einmal überprüft hat, ist ein Durchgang zu Ende. Also... hm.

    "Das Heisenberg-Modell ist ein mathematisches Modell zur Beschreibung von Ferromagnetismus in Festkörpern. Das Modell wurde 1928 von Werner Heisenberg[1] und Paul Dirac [2] vorgestellt um Ferromagnetismus in einem Festkörper zu erklären. Das Modell ist mittels eines effektiven Hamiltonoperators gegeben, der lediglich aus wechselwirkenden lokalisierten Spins auf einem Gitter (dem Kristallgitter) aufgebaut ist. Die Wechselwirkung ist dabei (zunächst) reduziert auf benachbarte Spins (sog. nächste- Nachbar-Wechselwirkung)[...]"

    Ich hoffe das führt so ungefähr vor Augen was ich mache(n will) :)

    MfG

  • Soweit wie ich es jetzt verstehe:
    - Eine vorher festgelegte Anzahl an Feldern wird mit zufällig 1 oder -1 belegt
    - Nun wird ein Durchlauf angefangen, mit jedem dieser Werte wird etwas gemacht, was ich nicht verstehe und am Ende kommt wieder 1 oder -1 raus (pro Feld).
    - Dies wird sooft wiederholt, wie es Durchläufe gibt.

    Mein Problem ist halt der kursive Teil, wenn der nicht existieren würde, könnte ich das Programm ja einfach schreiben.
    Was ich machen kann, wenn du willst, ist alles außer dem kursiven Teil zu schreiben (sofern der Rest stimmt), und dir dann quasi Platz für deine Rechnungen zu lassen.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.