one-file-projects/heun.py

30 lines
650 B
Python

# Verfahren von Heun zur numerischen Lösung von Anfangswertaufgaben.
def run_heun(K,h,x0,y0,ys):
if not isinstance(y0,list): y0 = [y0]
if not isinstance(ys,list): ys = [ys]
xk = x0
yk = y0
xka = 0
yka = [0]*len(yk)
ykp = [0]*len(yk)
xks = [x0]
yks = [ [v] for v in y0 ]
for i in range(K):
xka = xk + h
xks.append(xka)
for j in range(len(ys)):
yka[j] = yk[j] + h * ys[j](xk,*yk)
for j in range(len(ys)):
ykp[j] = 0.5*(yk[j] + yka[j] + h * ys[j](xka,*yka))
yks[j].append(ykp[j])
yk = ykp
xk = xka
return [xks] + yks