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")

