Seite 1 von 1

Euler-Funktion

Verfasst: Donnerstag 9. Juli 2020, 07:14
von zahlenprofi
def ForwardEuler(fun,y_0,T,n):
'Function for Forward Euler method, returns number of suspectibles s, infectious i and recovered r'
#Prepare Arrays for data
array_s = np.zeros(n+1)
array_i = np.zeros(n+1)
array_r = np.zeros(n+1)

array_s[0] = y_0[0]
array_i[0] = y_0[1]
array_r[0] = y_0[2]

n_index = 0
for index in range(n):
n_index = index + 1

res_s,res_i,res_r = fun(index,array_s[index],array_i[index],0)

array_s[n_index] = array_s[index] + T/n * res_s
array_i[n_index] = array_i[index] + T/n * res_i
array_r[n_index] = array_r[index] + T/n * res_r #not Processed yet

return array_s, array_i, array_r
Guten Tag, Ich habe hier folgende Eulerfunktion und muss nun erklären was Python hier macht. Zunächst werden ja nur die arrays erstellt und die Anfangswerte festgelegt.
n_index = 0
for index in range(n):
n_index = index + 1
Der Code hier bereitet mir Probleme. was bedeztet n_index=0 ?
Und wird dann eben nur jeder index im Zeitpunkt von n als der index +1 gesetzt?
res_s,res_i,res_r geben mir die neu berechneten Ergebnisse?
array_s[n_index] = array_s[index] + T/n * res_s
array_i[n_index] = array_i[index] + T/n * res_i
array_r[n_index] = array_r[index] + T/n * res_r
Und hier werden die Ergebnisse verrechnet oder?
Würde mich total freuen wenn mir jemand antworten würde!!! Arbeite das erste mal mit Python und habe heute noch einen Vortrag

Re: Euler-Funktion

Verfasst: Donnerstag 9. Juli 2020, 07:31
von Jankie
Hallo,

bitte setz deinen Code in die Code Tags (im vollständigen Editor auf </>), weil sonst die Einrückungen verloren geht die bei Python wichtig ist.

Re: Euler-Funktion

Verfasst: Donnerstag 9. Juli 2020, 07:41
von zahlenprofi
Okay danke

Re: Euler-Funktion

Verfasst: Donnerstag 9. Juli 2020, 08:58
von Sirius3
Typen gehören nicht Variablennamen, array_s oder array_i sind völlig nichtssagend. Was soll s oder i denn sein?
Um das zu klären brauchst Du einen Kommentar. Warum nennst Du es nicht gleich suspectibles, infectious oder recovered?
`n_index = 0` wird nie verwendet. Mit Indizes zu arbeiten ist eh nicht gut, wenn Du ein Array stückweise aufbauen willst, ist es besser, statt numpy-Arrays mit Python-Listen zu arbeiten und zum Schluß umzuwandeln.
Funktionsnamen werden wie Variablennamen komplett klein geschrieben:

Code: Alles auswählen

def forward_euler(function, y_0, T, n):
    'Function for Forward Euler method, returns number of suspectibles, infectious and recovered'
    suspectibles, infectious, recovered = y_0
    result_suspectibles = [suspectibles]
    result_infectious = [infectious]
    result_recovered = [recovered]
    for index in range(n):
        new_suspectibles, new_infectious, new_recovered = function(index, suspectibles, infectious, 0)
        suspectibles += T/n * new_suspectibles
        infectious += T/n * new_infectious
        recovered += T/n * new_recovered
        result_suspectibles.append(suspectibles)
        result_infectious.append(infectious)
        result_recovered.append(recovered)
    return np.asarray(result_suspectibles), np.asarray(infectious), np.asarray(recovered)
Und ja, Du hast es richtig erkannt: erst werden Variablen initalisiert und dann iterativ irgendetwas gerechnet. Was fun für Spaß macht, weiß ich aber nicht.
Besser wäre es, da nicht drei Arrays zu haben, sondern nur ein 3xn-Array.