Моя система уравнений выглядит так:
(х - а 1 ) 2 + (у - б 1 ) 2 = с 1
(х - а 2 ) 2 + (у - б 2 ) 2 = с 2
Я знаю, что это просто с помощью Matlab:
solve((x-a1)^2 + (y-b1)^2 - c1, (x-a2)^2 + (y-b2)^2 - c2)
Но как решить эту проблему с помощью C/C++? Я знаю математическую библиотеку под названием lapack
, но для линейного уравнения. Какие-либо предложения?
Ссылка: Какие есть хорошие библиотеки для решения системы нелинейных уравнений на C++?
Я предполагаю, что вы имеете в виду бесплатное программное обеспечение. Ссылаясь на приведенный выше вопрос stackoverflow, вы можете использовать:
Остальные из них, перечисленные в упомянутом вопросе stackoverflow, основаны на Fortran. Вы можете использовать их, только если используете f2c (программа Fortran to C)
Я хотел бы предложить несколько ответов, которые я нашел в Интернете после небольшого поиска. Но всегда факт, что библиотека зависит от ваших индивидуальных потребностей :)
ALIAS-C++ Библиотека алгоритмов C++ интервального анализа для систем уравнений для решения систем с линейными и нелинейными условиями
MINPACK Это библиотека подпрограмм FORTRAN для решения систем нелинейных уравнений или минимизации по методу наименьших квадратов невязки набора линейных или нелинейных уравнений.
Источник: Список числовых библиотек.
рассмотрим omnn::math https://github.com/ohhmm/openmind/blob/master/omnn/math/test/08_System.cpp
Valuable a1, a2, b1, b2; // init with values
System sys;
Variable x,y;
sys << (x-a1)^2 + (y-b1)^2 - c1; // addin an equation as an equality to 0
sys << (x-a2)^2 + (y-b2)^2 - c2;
for(auto& solution : sys.Solve(x))
std::cout << solution;
альтернативный способ - сделать одно уравнение:
((x-a1)^2 + (y-b1)^2 - c1)^2 + ((x-a2)^2 + (y-b2)^2 - c2)^2 = 0
Variable x,y;
Valuable a1, a2, b1, b2; // init with values
auto eq = ((x-a1)^2 + (y-b1)^2 - c1)^2 + ((x-a2)^2 + (y-b2)^2 - c2)^2;
eq.SetView(Valuable::View::Equation); // optional: equation optimizations
// get y function:
auto fn = eq(y);
// show
std::cout << fn << std::endl;
// evaluate
auto evaluate = fn;
evaluate.eval(x, 10);
evaluate.optimize(); // calculate
// show calculated value at x=10:
std::cout << evaluate << std::endl;
Вот пример проекта CMake: https://github.com/ohhmm/NonLinearSystem .
Дилавар