7. Změna hodnoty proměnné v programu#
Častou úlohou je modifikovat existující kód. Pokud jsou v něm proměnné pojmenovány tak, aby bylo zřetelné, co která proměnná obsahuje, je snadné kód přizpůsobit nové situaci.
Přednastavený kód modeluje dynamiku druhového bohatství na ostrově. Vychází z modelu z literatury a pro různé hodnoty parametrů modeluje vývoj ekosystému. V modelu je nastaven vývoj z nulové počáteční podmínky. Identifikujte příslušnou část programu, kde se počáteční podmínka nastavuje, a změňte tak, aby počáteční podmínka definující výchozí stav byla rovna pěti.
Stačí modifikovat jeden jediný řádek, nic jiného neměňte. Ani nemusíte mít ambice celému kódu rozumět. Jenom se snažte identifikovat místo, kde se počáteční podmínka nastavuje na nulu a přenastavte ji na pětku.
Výstup by se měl změnit následovně:
Popis |
Obrázek |
---|---|
Původní obrázek |
|
Nový obrázek |
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from scipy.integrate import solve_ivp
### Příprava funkcí a parametrů
pocatecni_podminka = 0 # počáteční podmínka
meze = [0,15] # interval, na kterém hledáme řešení
n = 100 # počet dělících bodů
parametry = [0.25,0.5,1,2] # seznam parametrů
def model(t, N, a=1, b=8, beta=0.2, D=0.5, k=1.3, S=20):
"""
Funkce z pravé strany modelu dynamické rovnováhy počtu druhů na ostrovech,
podle McArthura a Wilsona.
Vstup:
-----
Povinnými parametry jsou čas a počet druhů, volitelnými vzdálenost
D od pevniny, rozloha ostrova S, další parametry modelu a konstanty
úměrnosti. Přednastavené hodnoty jsou pouze ilustrační, závisí na volbě
jednotek a konkrétním použití.
Výstup:
------
Hodnota funkce.
"""
kolonizace = b/(D*(N+beta))
vymirani = a*N**k/S
return kolonizace - vymirani
### Řešení modelu
t=np.linspace(*meze, n) # definiční obor, v těchto bodech budeme hledat řešení
df = pd.DataFrame() # tabulka pro výstup
df["t"] = t # sloupec s časem
for parametr in parametry:
reseni = solve_ivp(
lambda t,x:model(t,x,D=parametr),
meze,
[pocatecni_podminka],
t_eval=t
)
df[parametr] = reseni.y.T # další sloupec tabulky
# lambda funkce viz https://www.w3schools.com/python/python_lambda.asp
# (dočasná nepojmenovaná funkce)
### Vizualizace řešení
ax = df.plot(x="t")
ax.set(
ylim = (0,None),
title = "Řešení diferenciální rovnice",
xlabel=r"$t$",
ylabel=r"$x$",
)
plt.legend(title="Hodnoty parametru")