25. Řešení modelu s různými parametry#
Lambda funkce využíváme s výhodou, pokud chceme řešit model pro různé hodnoty parametrů. Pokud má funkce mnoho parametrů a chceme je nechat na přednastavených hodnotách, můžeme v řešiči použít lambda funkce. Následující kód řeší model
r
. Výměna hodnot parametru je zajišťována v cyklu for
a pro předávání hodnoty parametru je použita lambda funkce.
Modifikujte kód tak, aby hodnoty ze seznamu seznam
byly dosazovány za parametr K
. Abychom měli celou dynamiku, zajistěte ještě, aby se řešení hledalo na intervalu \([0,10]\) a ne původně nastavených \([0,5]\). Nic jiného, než řádky s definicí intervalu, cyklováním proměnné a dosazením proměnné do funkce neměňte. Nemusíte rozumět celému kódu řádek po řádku, abyste byli schopni identifikovat místa, která je nutné modifikovat.
Výstup by se měl změnit následovně
Popis |
Obrázek |
---|---|
Původní obrázek |
|
Nový obrázek |
Pokud bychom lambda funkci nepoužili, je možné volitelné parametry funkce v příkazu solve_ivp
zadat i jiným způsobem, volbou args
. Nevýhoda takového postupu je, že v takovém případě musíte zadat všechny volitelné parametry a navíc v pořadí, ve kterém jsou uvedeny v definici funkce. Při použití konstrukce s lambda funkcí taková omezení nemáme.
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
pocatecni_podminka = [0.1]
meze = [0,5]
N = 100
seznam = [1,2,3,4]
t = np.linspace(*meze,N)
def rovnice(t, x, r=1, K=1):
return r*x*(1-x/K)
reseni = np.zeros((N,len(seznam)))
for i,r in enumerate(seznam):
reseni[:,i] = solve_ivp(
lambda t,x:rovnice(t,x,r=r),
meze,
pocatecni_podminka,
t_eval=t
).y
plt.plot(t,reseni)
plt.legend(seznam, title="Hodnota parametru")