Ошибка при построении разобраться с системой хаара? Есть функция f заданная дискретными значениями есть s[j] - слой вейвлета хаара, для нулевого слоя(уровня) суммы равенства парсеваля sum(f^2)=sum(s[j]^2)+sum(d[j]^2) сходятся , а для последующих нет в чем ошибка? var f=[],N=8,sum=0; for(var k=0;k"); document.write("sumr="+sumr+""); for(var j=1;j"); } //alert(s); //alert(d);
Ошибка заключается в неправильной формуле для вычисления коэффициентов вейвлета Хаара на последующих уровнях.
На первом уровне (j=1) формула должна выглядеть следующим образом:
s[j][l] = (s[j-1][2l]+s[j-1][2l+1])/Math.sqrt(2);
d[j][l] = (s[j-1][2l]-s[j-1][2l+1])/Math.sqrt(2);
Однако на последующих уровнях (j>1) формула для вычисления коэффициентов должна быть изменена:
s[j][l] = (s[j-1][2l]+s[j-1][2l+1])/Math.sqrt(2);
d[j][l] = (d[j-1][2l]+d[j-1][2l+1])/Math.sqrt(2);
Правильное исправление кода:
for(var j=1;j<=N/4;j++){
s[j] = [];
d[j] = [];
sumr=0;
for(var l=0;l<N/Math.pow(2,j+1);l++)
{
s[j][l] = (s[j-1][2*l]+s[j-1][2*l+1])/Math.sqrt(2);
d[j][l] = (d[j-1][2*l]+d[j-1][2*l+1])/Math.sqrt(2);
sumr+=s[j][l]*s[j][l]+d[j][l]*d[j][l];
}
document.write("sumr="+sumr+"<br>");
}
После внесения данного изменения код должен правильно вычислять коэффициенты на последующих уровнях и соблюдать равенство Парсеваля.