计算神经网络势函数及其对描述符分量的导数
void apply_ann_one_layer(
const int N_des,
const int N_neu,
const float* w0,
const float* b0,
const float* w1,
const float* b1,
float* q,
float& energy,
float* energy_derivative)
{
for ( int n = 0; n < N_neu; + + n) {
float w0_times_q= 0.0f;
for ( int d= 0; d < N_des; + + d) {
w0_times_q += w0[n * N_des + d]*q[d];
}
float x1 = tanh(w0_times_q - b0[n]);
float tanh_der = 1.0f - x1 * x1;
energy +=w1[n]*x1;
for (int d=0; d<N_des; ++d) {
float y1 = tanh_der * w0[ n * N_des + d] ;
energy_derivative[d] += w1[n] * y1;
}
}
energy -= b1[0];
}