import numpy as np
import matplotlib.pyplot as plt
import scipy
from scipy.integrate import odeint
n_1_vec=np.linspace(0,5,100)
# Define the symbiosis model
def rhs_sym_model(x,t):
rhs=np.zeros_like(x)
n_1=x[0]
n_2=x[1]
dn_1_dt=n_1*(1-n_1)+a_12*n_1*n_2
dn_2_dt=rho*(n_2*(1-n_2)+a_21*n_1*n_2)
rhs[0]=dn_1_dt
rhs[1]=dn_2_dt
return rhs
# Compute the quantities for plotting the phase plane
def ComputeSymbiosisSol(a_12,a_21,n_1_vec):
t = np.linspace(0, 4, 1000)
init_cond1=[0.75,0.75]
init_cond2=[0.15,0.15]
init_cond3=[2.5,0.5]
alpha=2.0
sol1 = odeint(rhs_sym_model, init_cond1,t)
sol2 = odeint(rhs_sym_model, init_cond2,t)
sol3 = odeint(rhs_sym_model, init_cond3,t)
num_steady_states=3
fourth_ss_condition= ((a_12*a_21<1))
if fourth_ss_condition==True:
num_steady_states=4
ss=np.zeros((num_steady_states,2),dtype=float)
ss[0,:]=[0,0]
ss[1,:]=[1,0]
ss[2,:]=[0,1]
if fourth_ss_condition==True:
ss[3,:]=[(1+a_12)/(1-a_12*a_21),(1+a_21)/(1-a_12*a_21)]
n1_ncline_1_n_1=[0,0]
n1_ncline_1_n_2=[0,5]
n1_ncline_2_n_2=1/a_12*(n_1_vec-1)
n2_ncline_1_n_1=[0,5]
n2_ncline_1_n_2=[0,0]
n2_ncline_2_n_2=1+a_21*(n_1_vec)
return sol1,sol2,sol3,ss,n1_ncline_1_n_1,n1_ncline_1_n_2,n1_ncline_2_n_2,n2_ncline_1_n_1,n2_ncline_1_n_2,n2_ncline_2_n_2
# Define model parameters
a_12=0.5
a_21=0.4
# Compute quantities
sol1,sol2,sol3,ss, n1_ncline_1_n_1,n1_ncline_1_n_2,n1_ncline_2_n_2,n2_ncline_1_n_1,n2_ncline_1_n_2,n2_ncline_2_n_2=ComputeSymbiosisSol(a_12,a_21,n_1_vec)
# PLot phase plane
fig, ax = plt.subplots(1,2)
ax[0].plot(n1_ncline_1_n_1,n1_ncline_1_n_2,'k--')
ax[0].plot(n_1_vec,n1_ncline_2_n_2,'k--')
ax[0].plot(n2_ncline_1_n_1,n2_ncline_1_n_2,'r--')
ax[0].plot(n_1_vec,n2_ncline_2_n_2,'r--')
ax[0].plot(sol1[:,0],sol1[:,1],sol2[:,0],sol2[:,1],sol3[:,0],sol3[:,1])
ax[0].plot(ss[:,0],ss[:,1],'k*')
ax[0].set_xlabel('$n_1$')
ax[0].set_ylabel('$n_2$')
ax[0].set_xlim([-0.05,2.5])
ax[0].set_ylim([-0.05,2.5])
# Try different parameters
a_12=1.5
a_21=0.8
# Recompute quantities
sol1,sol2,sol3,ss, n1_ncline_1_n_1,n1_ncline_1_n_2,n1_ncline_2_n_2,n2_ncline_1_n_1,n2_ncline_1_n_2,n2_ncline_2_n_2=ComputeSymbiosisSol(a_12,a_21,n_1_vec)
# Plot results
ax[1].plot(n1_ncline_1_n_1,n1_ncline_1_n_2,'k--')
ax[1].plot(n_1_vec,n1_ncline_2_n_2,'k--')
ax[1].plot(n2_ncline_1_n_1,n2_ncline_1_n_2,'r--')
ax[1].plot(n_1_vec,n2_ncline_2_n_2,'r--')
ax[1].plot(sol1[:,0],sol1[:,1],sol2[:,0],sol2[:,1],sol3[:,0],sol3[:,1])
ax[1].plot(ss[:,0],ss[:,1],'k*')
ax[1].set_xlabel('$n_1$')
ax[1].set_ylabel('$n_2$')
ax[1].set_xlim([-0.05,2.5])
ax[1].set_ylim([-0.05,2.5])
plt.tight_layout()
plt.grid()
plt.show()