Помогите найти библиотеку для решения систем нелинейных уравнений

Здравствуйте! Есть необходимость определять местонахождение точки в трехмерном пространстве. Для этого я составил систему из 4-х нелинейных уравнений, каждое описывает расстояние до известной точки через пространственную теорему Пифагора ( (x0 - x)^2 + (y0 - y)^2 + (z0 - z)^2 = L^2, где x0, y0, z0 - координаты известной точки, L - расстояние до этой точки ). Уравнений переизбыток, знаю. Нужно делать это быстро (данные обновлять нужно не менее 5 раз в секунду).

Подскажите, пожалуйста, готовую эффективную библиотеку или эффективный алгоритм, который решает данную задачку. Плата Arduino Uno R3

В инсте у вас недостаточно эффективная библиотека?))

Это не так делается. Никто в таких устройствах полноценные системы уравнений не решает.

Задачу Вы толком не описали, потому, уж звиняйте, будут только общие слова.

Уравнения заранее решаются насколько возможно аналитически. Заранее считаются таблицы значений таким образом, чтобы на лету приходилось только выбирать готовое значение из таблицы. Если таблицы получаются очень большими, надо оставлять часть работы для счёта на лету. Вообще, такие задачи - это всегда искусство балансирования между размерами таблиц и временем расчёта.

Вот как-то так.

1 лайк

Градиентным спуском это делается на реальных (шумных) данных. По поводу библиотек, волшебно решающих такие вещи, советую закатать губу.

Триангуляция что-ли?
Что дано? Что требуется? На AVR или на core i9 ?

@zernovalexn , начните с этого: http://ikfia.ysn.ru/wp-content/uploads/2018/01/Kalitkin1978ru.pdf

Да, именно это. Известны 4 опорные точки, по которым надо высчитать координаты пользователя. Производить вычисления должна Atmega328P (Arduino Uno).

[ЕвгенийП], Идею с таблицей рассматривал и отказался. Я не придумал как сделать их адаптивными под различные рабочие области.

[rkit], То есть готовых решений для ардуинки нет. Что ж, это все усложняет. Я почитаю про градиентный спуск.

[andriano], Спасибо, изучу.

И все же, может у кого из вас есть какие-то заготовки или что-то похожее? :sweat_smile:

У меня из заготовок есть маслята маринованные, сушёные белые… Подойдут?

Ардуина - это ж не питон…

3 лайка

Вероятность этого с хорошей точностью равна нулю.
Подобных разных задач слишком много. И даже при эквивалентных по формулировке задачах конкретные особенности могут склонять выбор к совершенно различным алгоритмам.
Так что, чтобы не терять попусту время, принимайтесь за написание собственной “библиотеки”.

Справедливо
Какие алгоритмы наиболее подходящие для моего случая?

Да кто ж знает, если Вы не привели никаких подробностей.
Попробуйте для начала расписать в лоб - уравнений не много, времени довольно много, вполне вероятно, ничего мудрить и не придется.

мне, хочу! :wink:

Хорошо, распишу подробнее.
Есть установка, координаты которой надо вычислить. Есть 4 излучателя, расположенных в разных точках с известными координатами. До них измеряется расстояние. Итого на руках у нас есть все необходимое для вычисления координат установки. Я составил систему из 4-х уравнений с 3-мя неизвестными (x, y, z установки). Все уравнения имеют вид (x0 - x)^2 + (y0 - y)^2 + (z0 - z)^2 = L^2, где x0, y0, z0 - координаты известной точки, L - расстояние до этой точки. На выходе системы местоположение установки. Это что-то вроде GPS

а не проще ли триангуляцию применить?

Триангуляция - это отдельный алгоритм??

это использование тригонометрии

Это усложняет конструкцию. Если я все правильно понимаю, для этого нужна направленная антенна. Поправьте меня, если я неверно понимаю принцип ее работы

определяется расстояние С от точки А и С от точки В, длина АВ известна, т.о. известны длины 3 сторон треугольника, дальше можем вычислить координаты точки С, короче школьна геометрия 7-8 класс, теорема синусов, косинусов и т д

1 лайк

А, ты про это. Таким путем я шел изначально, получалось не очень. Все зависело от габаритов устройства, особенно от высоты.

Хотя… Кажется я только что придумал как решить эту проблему.

из первого второе не следует. Даже на плоскости по этим вводным решением для С будут координаты не одной точки, а двух.
А по условиям задачи точки в пространстве, а не на плоскости. Там результатом решения каждого треугольника будет окружность, искать пересечения шести окружностей в пространстве задачка не сильно легче изначальной системы уравнений