Я думаю, что вы можете пропустить призывы к "norm (...)". Нормализация вектора - это просто деление каждого компонента вектора на длину. В уравнении 9 они вычисляют взвешенную сумму длин vt и vbest и умножают эту среднюю длину на norm (vbar). Вы просто умножаете это на vbar напрямую.
Кажется, цель этого уравнения - создать новый вектор v_ {t + 1}, длина которого равна средней длине vt и vbest. Однако vhat может быть любой длины вообще, поэтому умножение в уравнении 9 большую часть времени не даст вам правильного ответа, если вы не укажете, что длина вектора vhat равна точно одной. Вот что делает векторная норма.
Норма - это просто составляющие вектора, деленные на длину. Поэтому замените код для уравнения 9 на что-то вроде этого:
vtlen=0
for(int i=0; i<vt.length; i++)
{
vtlen+=vt[i]*vt[i];
}
vtlen=sqrt(vtlen);
for(int i=0; i<vt.length; i++)
{
vt[i] = (alpha * denom + (1 - alpha) * denom_best) * (v_hat[i] / vtlen);
}
Вы также проигнорировали операцию нормы в уравнении 7. Я не читал статью, но здесь это может быть не обязательно, поскольку веса суммируются с единицей, а векторы уже нормализованы. Мне бы пришлось потратить немного больше времени, чтобы убедить себя в том или ином случае, но, конечно, не помешало бы пойти дальше и нормализовать этот вычисленный вектор v '.