import numpy as np
import matplotlib.pyplot as plt

# a)
# Durch ausprobieren, von unterschiedlichen a's
# in die untere Funktion ergibt sich folgendes:
# a anziehend:
# [0.25, 0.5, 1.00, 1.50, 2.00, 2.50, 3.00]
# a abstossend:
# [3.25, 3.75, 4.0]

# b)
# Für die Aufgabe hat der Fixpunkt die bedeutung das die Anzahl Neuerkrankung gleich ist wie die der gesund
# werdenden Kindern, somit bleibt die Anzahl von kranken Kindern nach einer gewissen Zeit konstant.

# c)
# Weil der Fipunkt immer gleich bleibt, kann man folgendes annehmen:

# k(i) = k(i + 1) = k

# Fixpunktgleichung: k = a * k * (1-k)

# Aufgelöst nach a:

# k = a * k * (1-k)
# 1 = a * (1-k)
# 1 / (1-k) = a     |Aufgelöst nach a = alpha

# Aufgelöst nach k:

# 1 / (1-k) = a     | *(1-k)
# 1 = a * (1-k)     | :a
# 1 / a = 1 - k     | +k
# k + 1 / a = 1     | - (1 / a)
# k = 1 - (1 / a)   |Aufgelöst nach k

# Damit gilt:
# Für alle a ≤ 1 die Krankheit stirbt aus.
# Für alle a > 1 die Krankheit bleibt erhalten.

import numpy as np
import matplotlib.pyplot as plt

def fixpunkt(alpha):
    print('Alpha:', alpha)
    k = 0.1
    F = lambda x: alpha * x * (1 - x)
    y = np.array([])
    for j in range(100):
        y = np.append(y, k)
        k = F(k)  # y-Werte, Fixpunktgleichung: k = a * k * (1-k)
    print(y)
    return y


alphaList = np.array([0.25, 0.5, 1.00, 1.50, 2.00, 2.50, 3.00])  # alpha anziehend
alphaList = np.append(alphaList, [3.25, 3.5, 3.75, 4.0])  # alpha abstossend
k = np.arange(0.00, 4.00, pow(10, -2))  # x-Werte
for currentAlpha in alphaList:
    y = fixpunkt(currentAlpha)
    plt.title('Alpha: ' + str(currentAlpha))
    plt.xlabel('alpha-Werte')
    plt.ylabel('y-Werte der Iterationsformel')
    plt.plot(y)
    plt.grid()
    plt.show()


