Izhikevichモデル による神経細胞の活動 (膜電位) シミュレーション
// パラメータ指定
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;