понедельник, 4 июня 2018 г.

Python. Решение уравнений

Для решения системы линейных уравнений типа Ax = b в numpy имеется функция linalg.solve(). Они принимает на вход квадратную матрицу линейно-независимых строк A, а также вектор значений b, и рассчитывает вектор корней x. Для проверки результата в данном примере использована функция allclose(), она сравнивает два массива поэлементно и возвращает True, если разница не превышает заданной величины (по-умолчанию относительная разность не более 1E-5, абсолютная - 1E-8).


Если найти решение не удалось, можно попробовать функцию linalg.lstsq(), которая ищет такой вектор x, для которого евклидова норма разности между Ax и b будет минимальна.

Перейдём к нелинейным уравнениям. Корни полинома могут быть найдены с помощью метода roots() модуля numpy. При этом сам полином должен быть представлен в виде списка коэффициентов.

При работе с нелинейными уравнениями произвольного вида пригодится библиотека optimize модуля scipy, которая содержит коллекцию функций для оптимизации и поиска корней. Библиотека включает в себя достаточно много алгоритмов, список и описание которых можно найти, например, здесь. Однако в большинстве случаев метода fsolve() будет достаточно. Для его использования необходимо представить уравнение в виде f(x)=0, определить f(x) как функцию в Python и передать её вместе с начальным приближением в fsolve(). Результатом будет массив найденных чисел.


Данная функция подходит и для работы с системой нелинейных уравнений. Единственное, при этом нужно изменить f(x) так, чтобы функция принимала и возвращала кортеж чисел.



Комментариев нет:

Отправить комментарий