Вот эквивалентный код на Matlab-e:
CODE
arr = [261.4508114 261.5063567 261.6451613];
avg = sum(arr) / length(arr);
a = (2.0 - arr / avg) / (2.0 * avg);
b = (1.0 - arr / avg) * (1) * pi;
az1 = conv([1.0, 0.0], [a(2) b(2)]);
az1 = conv(az1, [a(3) b(3)]);
az2 = conv([1.0, 0.0], [a(1) b(1)]);
az2 = conv(az2, [a(3) b(3)]);
az3 = conv([1.0, 0.0], [a(1) b(1)]);
az3 = conv(az3, [a(2) b(2)]);
a0 = az1+az2+az3;
a1 = conv(az3, [a(2) b(3)]);
tt0 = 222.9164178;
tt1 = -1.571716919;
for i = 1:4,
z(i) = tt0 * a1(i) + j*(tt1 * a1(i));
if i > 1,
z(i) = z(i) - j*a0(i-1);
end;
end;
r = roots(z);
Интересное наблюдение - если в arr все числа одинаковые, то два корня полинома z равны нулю, а один не равен, именно он определяет частоту и скорость затухания. То-есть вся эта процедура стремится распределить скорости затухания по струнам так, чтобы имитировать двухстадийное затухание (резкий спад, потом плавное затухание), присущее настояшему музыкальному инструменту.