Дипломная (вкр): Компьютерное моделирование биологического нейрона

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

float a = 0.02f;b = 0.5f;

float c = -40.0f; // значение мембранного потенциала до которого он сбрасываеться после спайка

float d = 100.0f;k = 0.5f;Vr = -60.0f;Vt = -45.0f;

float Vpeak = 35.0f; // максимальное значение мембранного потенциала, при котором происходит сброс до значения сV0 = -60.0f; // начальное значение для мембранного потенциалаU0 = 0.0f; // начальное значение для вспомогательной переменнойCm = 50.0f; // электрическая ёмкость нейрона, размерность пкФ

float spike_times[Nneur*Tsim]; // времена спайков

int spike_neurons[Nneur*Tsim]; // соответвующие номера нейронов

int spike_num = 0;namespace std;init_connections(){(int con_idx = 0; con_idx < Ncon; ){

// случайно выбираем постсипантические и пресинаптические нейроны

int pre = rand() % Nneur;post = rand() % Nneur;_conns[con_idx] = pre;_conns[con_idx] = post;[con_idx] = (rand() % ((int)(maxWeight - minWeight)*10))/10.0f + minWeight;

if (pre >= Nexc){

// если пресинаптический нейрон тормозный то вес связи идет со знаком минус

weights[con_idx] = -weights[con_idx];

}[con_idx][0] = 0.0f;_idx++;

}

}init_neurons(){(int neur_idx = 0; neur_idx < Nneur; neur_idx++){

// случайно разбрасываем приложенные токи[neur_idx] = (rand() % (int) (Iex_max*10))/10.0f;

Isyn[neur_idx] = 0.0f;[neur_idx][0] = V0;[neur_idx][0] = U0;

}

}izhik_Vm(int neuron, int time){(k*(Vms[neuron][time] - Vr)*(Vms[neuron][time] - Vt) - Ums[neuron][time] + Iex[neuron] + Isyn[neuron])/Cm;

}izhik_Um(int neuron, int time){a*(b*(Vms[neuron][time] - Vr) - Ums[neuron][time]);

}save2file(){res_file;_file.open("rastr.csv");(int k = 0; k < spike_num; k++){_file << spike_times[k] << "; " << spike_neurons[k] + 1 << "; " << endl;

}_file.close();

// Вычисление среднего по всей сети мембранного потенциала в каждый момент времени

// нечто наподобие электроэнцефалографии_file.open("oscill.csv");

for (int t = 0; t < Tsim; t++){Vm_mean= 0.0f;(int m = 0; m < Nneur; m++){_mean += Vms[m][t];

}_mean /= Nneur;_file << t*h << "; " << Vm_mean << "; " << endl;

}_file.close();

}main(){_connections();_neurons();expire_coeff = exp(-h/psc_excxpire_time);(int t = 1; t < Tsim; t++){

// проходим по всем нейронам(int neur = 0; neur < Nneur; neur++){

Vms[neur][t] = Vms[neur][t-1] + h*izhik_Vm(neur, t-1);[neur][t] = Ums[neur][t-1] + h*izhik_Um(neur, t-1);[neur] = 0.0f;(Vms[neur][t-1] >Vpeak){[neur][t] = c;[neur][t] = Ums[neur][t-1] + d;_times[spike_num] = t*h;_neurons[spike_num] = neur;

spike_num++;

}

}

// проходим по всем связям

for (int con = 0; con < Ncon; con++){

y[con][t] = y[con][t-1]*expire_coeff;(Vms[pre_conns[con]][t-1] > Vpeak){[con][t] = 1.0f;

}[post_conns[con]] += y[con][t]*weights[con];

}

}file();0;

}

Источник: https://www.bibliofond.ru/detail.aspx?id=784944