In [1]:
import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate

In [2]:
x_axis = np.linspace(0, 0.95, 20) #grid point spaced 5cm apart in meters
x, y = np.meshgrid(x_axis, x_axis)
xy = np.vstack((x.flatten(),y.flatten())).T

sigma = 0.05
len(xy)


Out[2]:
400

In [3]:
def activation(pos,firing_loc,sigma):
    return np.exp(-(pos-firing_loc)**2/(2*sigma**2))

In [4]:
radius = np.sqrt(2)*sigma
fig, ax = plt.subplots() 

for i in range(xy.shape[0]):
    circle = plt.Circle(xy[i],radius, edgecolor=[0,0,0,0.2], facecolor="None")
    ax.add_artist(circle)
ax.scatter(xy[:,0], xy[:,1], s=3, edgecolor="None")
ax.set_aspect("equal")
plt.show()
# fig.savefig('plotcircles.png')



In [5]:
tau_plus, tau_min, k = 0.1, 0.3, 0.1
#differential equation for dynamical variables r_plus(=rp) and r_min(=rm:
drp = lambda rp, rm, t: 1/tau_plus*(h(t)-rp-rm)
drm = lambda rm, t: 1/tau_min*(h(t)-rm)
#actiation function/linear chirp:
h = lambda t: np.sin(np.pi*f(t)*t)
f = lambda t: k*t

#solution contains tau_plus in 0 and tau_min in 1
#we have to put both DEs into ones function for the ODE solver
def differential(solution, t):
    return drp(solution[0], solution[1], t), drm(solution[1],t)
rm_0, rp_0 = 0, 0
initial_values = np.array([rm_0, rp_0])

In [6]:
t = np.linspace(0, 10, 1000) #tshould be in seconds
dyn_var_solution = integrate.odeint(differential, initial_values, t)

In [7]:
plt.plot(f(t), dyn_var_solution[:, 0], label=r'$r^+$')
plt.plot(f(t), dyn_var_solution[:, 1], label=r'$r^-$')
plt.plot(f(t), h(t), label=r'$h(t)$')
plt.legend(loc='best')
plt.xlabel('$f(t)$ [Hz]')
plt.show()


6


In [8]:
N_in, N_out = 400, 100
weights = np.random.uniform(size=(N_out,N_in))
normalization = np.sqrt(np.sum(weights**2,axis=1)) 
weights /= normalization[:, np.newaxis]

In [9]:
def forward_input(r_in,weights):
    return np.dot(weights,r_in)

In [10]:
r_in = activation(pos,firing_loc,sigma)
for t in np.arange(len(r_in)):
    h[t] = forward_input(r_in[t],weights)
    rp[t+1] = rp[t]+1/tau_plus*(h[t]-rp[t]-rm[t])
    rm[t+1] = rm[t]+1/tau_min*(h[t]-rm[t])
    r_out[i,t] = 2/np.pi*np.arctan(g*(rp[i,t]-mu))


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-10-4a4c9145800b> in <module>()
----> 1 r_in = activation(pos,firing_loc,sigma)
      2 for t in np.arange(len(r_in)):
      3     h[t] = forward_input(r_in[t],weights)
      4     rp[t+1] = rp[t]+1/tau_plus*(h[t]-rp[t]-rm[t])
      5     rm[t+1] = rm[t]+1/tau_min*(h[t]-rm[t])

NameError: name 'pos' is not defined