Izhikevichモデル による神経細胞の活動 (膜電位) シミュレーション

動作イメージ

neuron.mp4

Untitled

ソースコード (Processing)

// パラメータ指定
float v=-70; float u=-20; float I=14;
float a=0.02; float b=0.2; float c=-65; float d=8;
float tau=0.2; // time step
float t=0; // time
int dl=500; // 保存する配列サイズ
float[] vv = new float[dl]; //膜電位(神経活動)

void setup(){
  size(500,250);
  strokeWeight(2);
  // 配列の初期化
  for(int j=0;j<vv.length;j++) vv[j] = c;
}
int i = 0;
void draw(){
  //背景を黒に塗りつぶす
  background(0);
  // 時間を1つ進める
  t += tau;
  //オイラー法による数値計算
  v += tau*(0.04*sq(v)+5*v+140-u+I);
  u += tau*a*(b*v-u);
  //活動電位が発生した後のリセット処理
  if(v>30){
    v = c; u += d;
  }
  //配列を1つずらして格納する
  for(int j=1;j<vv.length;j++){
    vv[j-1] = vv[j];
  }
  vv[dl-1] = v;
  stroke(0,255,0);
  //表示する
  for(int j=1;j<vv.length;j++){
    line(j-1,100-vv[j-1],j,100-vv[j]);
  }
  // y=0の線を描く
  stroke(255);
  line(0,100,width,100);
  // 経過時間の表示
  text(nf(i*tau,5,1)+" ms",10,20);
  i++;
}

3行目のパタメータを変えることで、様々なタイプの神経細胞をシミュレートできます。例えば Chatting-Type (CH) ニューロンは、

float a=0.02; float b=0.2; float c=-50; float d=2;

参考