3. Lov v populaci - fázový portrét#
Model
\[\frac{\mathrm dx}{\mathrm dt}=rx^{1+a}\left(1-\frac xK\right)-h-Hx\]
v závislosti na parametrech
zahrnuje logistický růst, slabý Alleeho efekt (pro \(a\neq 0\)), lov konstantní intenzity (pro \(h\neq 0\)) anebo lov s konstatnním úsilím (pro \(H\neq 0\)).
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
def model(x,r=1,K=1,h=0, a=0, H=0):
return r*(x**(1+a))*(1-x/K)-h-H*x
parametry =[
[{},"logistický růst"],
[{'h':0.2},"logistický růst s konstantním lovem"],
[{'H':0.2},"logistický růst s lovem úměrným velikosti"],
[{'a':1, 'r':1.5},"slabý Alleeho efekt"],
[{'a':1, 'r':1.5, 'H':0.2},"slabý Alleeho efekt s lovem úměrným velikosti"]
]
x = np.linspace(0,1,200)
df = pd.DataFrame(index=x)
df.index.name = "velikost populace"
for data,popis in parametry:
df[popis] = model(x,**data)
df
logistický růst | logistický růst s konstantním lovem | logistický růst s lovem úměrným velikosti | slabý Alleeho efekt | slabý Alleeho efekt s lovem úměrným velikosti | |
---|---|---|---|---|---|
velikost populace | |||||
0.000000 | 0.000000 | -0.200000 | 0.000000 | 0.000000 | 0.000000 |
0.005025 | 0.005000 | -0.195000 | 0.003995 | 0.000038 | -0.000967 |
0.010050 | 0.009949 | -0.190051 | 0.007939 | 0.000150 | -0.001860 |
0.015075 | 0.014848 | -0.185152 | 0.011833 | 0.000336 | -0.002679 |
0.020101 | 0.019696 | -0.180304 | 0.015676 | 0.000594 | -0.003426 |
... | ... | ... | ... | ... | ... |
0.979899 | 0.019696 | -0.180304 | -0.176283 | 0.028951 | -0.167029 |
0.984925 | 0.014848 | -0.185152 | -0.182137 | 0.021936 | -0.175049 |
0.989950 | 0.009949 | -0.190051 | -0.188041 | 0.014774 | -0.183216 |
0.994975 | 0.005000 | -0.195000 | -0.193995 | 0.007462 | -0.191533 |
1.000000 | 0.000000 | -0.200000 | -0.200000 | 0.000000 | -0.200000 |
200 rows × 5 columns
ax = df.plot()
ax.set(ylim=(0,None));

# Export do Excelu
df.to_excel('data.xlsx')
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[3], line 2
1 # Export do Excelu
----> 2 df.to_excel('data.xlsx')
File /mnt/python/miniforge3/envs/dmp/lib/python3.13/site-packages/pandas/util/_decorators.py:333, in deprecate_nonkeyword_arguments.<locals>.decorate.<locals>.wrapper(*args, **kwargs)
327 if len(args) > num_allow_args:
328 warnings.warn(
329 msg.format(arguments=_format_argument_list(allow_args)),
330 FutureWarning,
331 stacklevel=find_stack_level(),
332 )
--> 333 return func(*args, **kwargs)
File /mnt/python/miniforge3/envs/dmp/lib/python3.13/site-packages/pandas/core/generic.py:2417, in NDFrame.to_excel(self, excel_writer, sheet_name, na_rep, float_format, columns, header, index, index_label, startrow, startcol, engine, merge_cells, inf_rep, freeze_panes, storage_options, engine_kwargs)
2404 from pandas.io.formats.excel import ExcelFormatter
2406 formatter = ExcelFormatter(
2407 df,
2408 na_rep=na_rep,
(...) 2415 inf_rep=inf_rep,
2416 )
-> 2417 formatter.write(
2418 excel_writer,
2419 sheet_name=sheet_name,
2420 startrow=startrow,
2421 startcol=startcol,
2422 freeze_panes=freeze_panes,
2423 engine=engine,
2424 storage_options=storage_options,
2425 engine_kwargs=engine_kwargs,
2426 )
File /mnt/python/miniforge3/envs/dmp/lib/python3.13/site-packages/pandas/io/formats/excel.py:943, in ExcelFormatter.write(self, writer, sheet_name, startrow, startcol, freeze_panes, engine, storage_options, engine_kwargs)
941 need_save = False
942 else:
--> 943 writer = ExcelWriter(
944 writer,
945 engine=engine,
946 storage_options=storage_options,
947 engine_kwargs=engine_kwargs,
948 )
949 need_save = True
951 try:
File /mnt/python/miniforge3/envs/dmp/lib/python3.13/site-packages/pandas/io/excel/_openpyxl.py:57, in OpenpyxlWriter.__init__(self, path, engine, date_format, datetime_format, mode, storage_options, if_sheet_exists, engine_kwargs, **kwargs)
44 def __init__(
45 self,
46 path: FilePath | WriteExcelBuffer | ExcelWriter,
(...) 55 ) -> None:
56 # Use the openpyxl module as the Excel writer.
---> 57 from openpyxl.workbook import Workbook
59 engine_kwargs = combine_kwargs(engine_kwargs, kwargs)
61 super().__init__(
62 path,
63 mode=mode,
(...) 66 engine_kwargs=engine_kwargs,
67 )
ModuleNotFoundError: No module named 'openpyxl'
3.1. Cvičení#
Zkopírujte si buňky výše a pokuste se modifikovat kód tak, aby nakreslil pravou stranu logistické rovnice, poté totéž pro nosnou kapacitu navýšenou o 50 procent a do třetice totéž, ale o 50 procent bude navýšen parametr \(r\). Jediné, co musíte provést, je modifikovat seznam v proměnné parametry
.