Lov v populaci - fázový portrét

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));
../_images/5b5164d40823f7a3ab1521b32ea85f6483812e0ae42bc29ea916c5346f997ed6.png
# 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.