Это переформулировка решения shsmurfy, когда вы априори выбираете 3 положительных допуска (e1, e2, e3)
Задача состоит в том, чтобы искать наименьшие натуральные числа (n1, n2, n3) и, таким образом, наибольшую корневую частоту f, такую что:
f1 = n1*f +/- e1
f2 = n2*f +/- e2
f3 = n3*f +/- e3
Мы предполагаем, что 0 <= f1 <= f2 <= f3 <br>
Если мы исправим n1, то получим следующие отношения:
f is in interval I1=[(f1-e1)/n1 , (f1+e1)/n1]
n2 is in interval I2=[n1*(f2-e2)/(f1+e1) , n1*(f2+e2)/(f1-e1)]
n3 is in interval I3=[n1*(f3-e3)/(f1+e1) , n1*(f3+e3)/(f1-e1)]
Мы начинаем с n1 = 1, затем увеличиваем n1 до тех пор, пока интервал I2 и I3 не будут содержать целое число - то есть floor(I2min) different from floor(I2max)
то же самое с I3
Затем мы выбираем наименьшее целое число n2 в интервале I2 и наименьшее целое число n3 в интервале I3.
При нормальном распределении ошибок с плавающей запятой наиболее вероятной оценкой корневой частоты f является та, которая сводит к минимуму
J = (f1/n1 - f)^2 + (f2/n2 - f)^2 + (f3/n3 - f)^2
То есть
f = (f1/n1 + f2/n2 + f3/n3)/3
Если в интервалах I2, I3 есть несколько целых чисел n2, n3, мы также можем выбрать пару, минимизирующую вычет
min(J)*3/2=(f1/n1)^2+(f2/n2)^2+(f3/n3)^2-(f1/n1)*(f2/n2)-(f1/n1)*(f3/n3)-(f2/n2)*(f3/n3)
Другим вариантом может быть продолжение итерации и попытка минимизировать другой критерий, такой как min (J (n1)) * n1, пока f не упадет ниже определенной частоты (n1 не достигнет верхнего предела) ...