ich habe ein Code geschrieben, der die Zustandswahrscheinlichkeiten einer Markov-Kette ausgeben soll. Leider gibt mir Python einen Indexfehler aus. Ich habe tagelang versucht, diesen Fehler zu beheben, aber kriege es leider alleine nicht hin.
Ich bin noch Anfängerin und stell mich wahrscheinlich doof an. Ich würde mich sehr freuen, wenn ihr mir helfen könntet.
Das ist der Code:
Code: Alles auswählen
import numpy as np
import matplotlib.pyplot as plt
# Zustandswahrscheinlichkeiten vom Spiel B
G = [[0, 1, -1], [-1, 0, 1], [1, -1, 0]]
UebergangsMatrixB = [[0, 1 / 10, 9 / 10], [1 / 4, 0, 3 / 4], [3 / 4, 1 / 4, 0]]
ZustandsWkeit = {}
ZustandsWkeit[(0, 0)] = 1
ZustandsWkeit[(1, 0)] = 0
ZustandsWkeit[(2, 0)] = 0
def ZustandsWkeit(i, n, P, Speichern={}):
if (i, n) in Speichern:
return Speichern[(i, n)]
if n == 0:
return 1 if i == 0 else 0
Ergebnis = sum(ZustandsWkeit(k, n - 1, P, Speichern) * P[k + 1][i + 1] for k in range(3))
Speichern[(i, n)] = Ergebnis
return Ergebnis
def Zustaende(n, UebergangsMatrixB):
zustaende = []
for i in range(n + 1):
zustand = [
ZustandsWkeit(0, i, UebergangsMatrixB),
ZustandsWkeit(1, i, UebergangsMatrixB),
ZustandsWkeit(2, i, UebergangsMatrixB)
]
zustaende.append(zustand)
return zustaende
# Anzahl der Zeitschritte, für die der Zustand berechnet werden soll
n = 1
# Zustände berechnen
zustaende = Zustaende(n, UebergangsMatrixB)
# Zeitachse erstellen#
t = range(n+1)
# Zustandswahrscheinlichkeiten plotten
plt.plot(t, [z[0] for z in zustaende], label="Zustand 0")
plt.plot(t, [z[1] for z in zustaende], label="Zustand 1")
plt.plot(t, [z[2] for z in zustaende], label="Zustand 2")
# Achsenbeschriftungen und Legende hinzufügen
plt.xlabel("t")
plt.ylabel("Zustandswahrscheinlichkeiten")
plt.legend()