# Codes for practice No. 10
###### tags: `mathbio`
## Code for plotting static phase portrait
```code=python
%matplotlib inline
A = 1.0; B = 3.0; k1 = 2.0; km1 = 2.0; k2 = 1.8; k3 = 3.0
P = lambda x,y: k1*A - (km1 + k2*B)*x + k3*x**2*y
Q = lambda x,y: k2*B*x - k3*x**2*y
fun = lambda p,t: [ P(p[0],p[1]), Q(p[0],p[1]) ]
plt.figure(figsize=(10,10))
x0_ = 1.0
tt = np.linspace(0,100, 1000)
for y0_ in [0,1,2,3,4]:
xy0 = [x0_, y0_]
zz = odeint(fun, xy0, tt)
plt.plot(zz[:,0], zz[:,1])
plt.plot([xy0[0]], [xy0[1]], 'o', mec='k', ms=4)
pt = zz[-1,:]
plt.plot([pt[0]], [pt[1]], 'o', mec='k', ms=4)
# visualize the vector field
xx = np.linspace(0,3,20)
yy = np.linspace(0,3,20)
Xm,Ym = np.meshgrid(xx,yy)
plt.quiver(Xm,Ym, P(Xm,Ym), Q(Xm,Ym), scale_units='xy', angles='xy')
plt.legend()
plt.xlim(0,3)
plt.ylim(0,3)
plt.xlabel('X')
plt.ylabel('Y')
```
## Code for animating the bifuraction
```code=python
%matplotlib notebook
from matplotlib.animation import FuncAnimation
A = 1.0; B = 3.0; k1 = 2.0; km1 = 2.0; k3 = 3.0
# k2 = 1.8
P = lambda x,y,k2: k1*A - (km1 + k2*B)*x + k3*x**2*y
Q = lambda x,y,k2: k2*B*x - k3*x**2*y
fun = lambda p,t,k2: [ P(*p, k2), Q(*p, k2) ]
fig, ax = plt.subplots()
line, = ax.plot([], '-')
ax.set_xlim(0,3)
ax.set_ylim(0,3)
ax.set_xlabel('X')
ax.set_ylabel('Y')
def animate(fn):
tt = np.linspace(0,100, 1000)
zz = odeint(fun, [1.0, 4.0], tt, args=(.8+1./100*fn,))
line.set_data(zz[:,0], zz[:,1])
return line
anim = FuncAnimation(fig, animate, frames=100, interval=50)
plt.show()
```
## Jacobian code
```code=python
Jxx = lambda x,y: -(km1+k2*B)+2*k3*x*y
Jxy = lambda x,y: k3*x**2
Jyx = lambda x,y: k2*B - 2*k3*x*y
Jyy = lambda x,y: -k3*x**2
JJ = lambda x,y: np.array([
[Jxx(x,y), Jxy(x,y)],
[Jyx(x,y), Jyy(x,y)]
])
curJ = JJ(pt[0], pt[1])
display(curJ)
eivals, eivecs = np.linalg.eig(curJ)
display(eivals)
```
# Imports for 3D
```code=python
%matplotlib notebook
from mpl_toolkits.mplot3d import Axes3D
ax = fig.add_subplot(111, projection='3d')
```