Задать вопрос
@SergeySerge11

Как составить список уникальных комплексных решений для уравнения? Как понять что число 0.999999 то же что 1.0000001?

Для каждой точки пространства вычисляю функцию, получается триллион решений, я знаю, что там допустим 10 уникальных решений, как их индексировать?
К примеру как понять что комплексное число 0.00001 -0.99999*i равно числу -0.00001 -1.000001*i ?
Какой есть оптимальный алгоритм, что бы не перебирать каждый раз весь список?
  • Вопрос задан
  • 162 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
trapwalker
@trapwalker
Программист, энтузиаст
Сравнение нужно делать с некоторой точностью. Получите разность между сравниваемыми значениями и сравнивайте модули с пороговым.
In [8]: a=0.00001-0.99999j; b=-0.00001-1.000001j

In [9]: abs(a-b)
Out[9]: 2.2825424420965077e-05

Вот этот модуль можете сравнить с 1e-4, если меньше, то считаем что числа равны.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Можно методом Монте-Карло перебирать все случайные решения на всей области определения.
Потом - делать квантизацию (так чтобы такое значение 0.99999 равнялось такому 1.000001)
и квантизованные пары (ключи) складывать в какую-то хеш-табличку с подсчетом.
Триллион итераций ждать не будем. Может быть где-то через тысяч сто у нас будет
гистограмма. И бери из нее top 10 значений. Это и будут твои 10 уникальных.
Ответ написан
@vadimr
В общем виде, как вы её сформулировали, эта задача неразрешима. Надо исследовать саму функцию и её машинное представление. Вся наука численных методов именно об этом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы