EQS创建

 

 

非常抱歉遇到了错误。根据错误信息,问题出在使用了`A_post`作为变量名。这是因为在Brian2中,`_pre`和`_post`后缀用于表示突触前后的变量。 为了解决这个问题,我们可以修改STDP规则的变量名,以避免和预定义的后缀冲突。 以下是修改后的代码: ```python import numpy as np import matplotlib.pyplot as plt from brian2 import * # 设置参数 N = 100 # 神经元数量 duration = 500 * ms # 模拟时间 dt = 0.1 * ms # 时间步长 # 定义方程和STDP规则 eqs = ''' dv/dt = (I - v) / (10*ms) : 1 (unless refractory) I : 1 ''' # 定义STDP规则 stdp_eqs = ''' w : 1 dApre/dt = -Apre / tau_pre : 1 (event-driven) dApost/dt = -Apost / tau_post : 1 (event-driven) ''' stdp_on_pre = ''' v_post += w Apre += dApre w = clip(w + Apost, 0, w_max) ''' stdp_on_post = ''' Apost += dApost w = clip(w + Apre, 0, w_max) ''' # 创建神经元组和连接权重 neurons = NeuronGroup(N, eqs, threshold='v>1', reset='v=0', refractory=5*ms) synapses = Synapses(neurons, neurons, stdp_eqs, on_pre=stdp_on_pre, on_post=stdp_on_post) synapses.connect() # 随机初始化神经元电流和连接权重 neurons.I = 'rand()' synapses.w = 'rand()' # 记录神经元脉冲 spikes = SpikeMonitor(neurons) # 运行仿真 run(duration) # 提取脉冲时间和神经元索引 spike_times = spikes.t spike_indices = spikes.i # 将脉冲分类为5个类别 num_classes = 5 classes = [[] for _ in range(num_classes)] for t, idx in zip(spike_times, spike_indices): class_idx = int(idx / (N / num_classes)) classes[class_idx].append(t) # 绘制脉冲响应结果 plt.figure(figsize=(10, 5)) for i, class_spikes in enumerate(classes): plt.eventplot(class_spikes, color='C{}'.format(i), linewidths=0.5) plt.xlabel('Time (ms)') plt.ylabel('Class Index') plt.title('Spike Response') plt.xlim(0, duration/ms) plt.ylim(0, num_classes-1) plt.show() ``` 请注意,我们将`dA_pre`和`dA_post`改为`dApre`和`dApost`,以避免与后缀冲突。同时,我们也将相应的变量名在STDP规则中进行了修改。 如果您还遇到任何问题,请随时向我提问。非常抱歉给您带来的不便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值