Я хочу решить систему уравнений в C ++. Есть ли инструмент / пакет, который предоставляет решатель? Моя система выглядит так
(x-a)^2 + (y-b)^2 = d1
(x-c)^2 + (y-d)^2 = d2
В этом случае я знаю a, .., d, d1, d2.
Насколько я знаю, я взял пространственный случай (a, b, d = 0, а c не 0), но я хочу найти решение во всех случаях.
У кого-нибудь есть идея?
Если вам нужна общая поддержка для решения нелинейных уравнений Церера, PETSc, dlib у всех есть нелинейные решатели, которые вы можете использовать из C ++ для решения проблем, которые вы описываете. Хотя у вас гораздо больше шансов найти лучшую поддержку для этого типа работы в Matlab или даже в python scipy. Особенно, если вы не очень заинтересованы в производительности, и вам нужно только легко решать мелкомасштабные уравнения.
Если все, что вам нужно, это решить систему, которую вы разместили, есть простое решение в закрытой форме:
Я предлагаю вам прочитать «Численные рецепты».
В этой книге есть глава, посвященная решению уравнений, и их предисловие обычно дает очень хороший обзор в достаточно простых терминах по всем предметам.
обратите внимание, что численное решение уравнений имеет много мелких деталей, и использование любого пакета без обработки деталей может привести к плохому решению (или просто медленному, или недостаточно хорошему).
Да, этот поддерживает нелинейные системы и перегруженный оператор ^.
В геометрическом смысле система уравнений (СОЭ)
представляют два круга. Первый кружок которого
центр находится в (a, b) и RADUIS SQRT (D1), и
второй круг (c, d) с радиусом sqrt (d2).
Есть три случая для рассмотрения
the first case is if the two circles do not
intersect. In this case the equation does not have a
solution.
The second case is if the two circles intersect at
two points. In such case the equations will have two
solutions. i.e two possible values for (x,y)
In third case the two circles intersect at exactly
two points. In this case the SOE has exactly one
solution. i.e one pair of solution (x,y).
Итак, как мы можем проверить, есть ли у SOE решение? хорошо мы
проверьте, пересекаются ли два круга.
Два круга пересекаются, если:
Расстояние между двумя кружками меньше или
равна сумме их радиусов.
sqrt( (a-c)^2 + (b-d)^2 ) <= sqrt(d1) + sqrt(d2).
если выполняется равенство, то две окружности пересекаются в
ровно одна точка, и поэтому SOE имеет ровно одну
решение.
Я могу продолжить объяснять, но я оставлю вас с
уравнение. Проверь это: