Автор оригинала: Guest Contributor.
Библиотека Numpy может использоваться для выполнения различных математических/научных операций, таких как матричные кросс-и точечные произведения, поиск значений синуса и косинуса, преобразование Фурье и манипулирование формой и т. Д. Слово Numpy-это сокращенное обозначение “Числового питона”.
В этой статье вы увидите, как решить систему линейных уравнений с помощью библиотеки Numpy Python.
Что такое Система линейных уравнений?
Википедия определяет систему линейных уравнений как:
В математике система линейных уравнений (или линейная система) представляет собой совокупность двух или более линейных уравнений, включающих один и тот же набор переменных.
Конечная цель решения системы линейных уравнений – найти значения неизвестных переменных. Вот пример системы линейных уравнений с двумя неизвестными переменными, x
и y
:
Уравнение 1:
4x + 3y = 20 -5x + 9y = 26
Чтобы решить приведенную выше систему линейных уравнений, нам нужно найти значения переменных x
и y
. Существует множество способов решения такой системы, таких как Исключение переменных, Правило Крамера, Метод сокращения строк и Матричное решение. В этой статье мы рассмотрим матричное решение.
В матричном решении система решаемых линейных уравнений представляется в виде матрицы AX
. Например, мы можем представить Уравнение 1 в виде матрицы следующим образом:
A = [[ 4 3] [-5 9]] X = [[x] [y]] B = [[20] [26]]
Чтобы найти значение переменных x
и y
в Уравнение 1 , нам нужно найти значения в матрице X
. Для этого мы можем взять точечное произведение обратной матрицы A
и матрицы B
, как показано ниже:
X = inverse(A).B
Если вы не знакомы с тем, как найти обратную матрицу, взгляните на эту ссылку, чтобы понять, как вручную найти обратную матрицу. Чтобы понять матричный точечный продукт, ознакомьтесь с этой статьей .
Решение системы линейных уравнений с Numpy
Из предыдущего раздела мы знаем, что для решения системы линейных уравнений необходимо выполнить две операции: инверсию матрицы и матричное точечное произведение. Библиотека Numpy из Python поддерживает обе эти операции. Если вы еще не установили библиотеку Numpy, вы можете сделать это с помощью следующей команды pip
:
$ pip install numpy
Теперь давайте посмотрим, как решить систему линейных уравнений с помощью библиотеки Numpy.
Использование методов inv() и dot()
Во-первых, мы найдем обратную матрицу A
, которую мы определили в предыдущем разделе.
Давайте сначала создадим матрицу A
в Python. Для создания матрицы можно использовать метод array
модуля Numpy. Матрицу можно рассматривать как список списков, где каждый список представляет собой строку.
В следующем скрипте мы создаем список с именем m_list
, который далее содержит два списка: [4,3]
и [-5,9]
. Эти списки являются двумя строками в матрице A
. Чтобы создать матрицу A
с помощью Numpy, m_list
передается методу array
, как показано ниже:
import numpy as np m_list = [[4, 3], [-5, 9]] A = np.array(m_list)
Чтобы найти обратную матрицу, матрица передается в метод linalg.inv()
модуля Numpy:
inv_A = np.linalg.inv(A) print(inv_A)
Следующий шаг-найти точечное произведение между обратной матрицей A
и матрицей B
. Важно отметить, что матричное точечное произведение возможно только между матрицами , если внутренние размеры матриц равны , то есть количество столбцов левой матрицы должно соответствовать количеству строк в правой матрице.
Для поиска точечного продукта с помощью библиотеки Numpy используется функция linalg.dot ()
. Следующий скрипт находит точечное произведение между обратной матрицей A
и матрицей B
, которая является решением уравнения 1 .
B = np.array([20, 26]) X = np.linalg.inv(A).dot(B) print(X)
Выход:
[2. 4.]
Вот, 2
и 4
являются ли соответствующие значения для неизвестных x
и y
in Уравнение 1 . Для проверки, если вы подключаете 2
на месте неизвестного x
и 4
на месте неизвестного y
в уравнении 4x + 3y
вы увидите , что результат будет равен 20.
Давайте теперь решим систему из трех линейных уравнений, как показано ниже:
4x + 3y + 2z = 25 -2x + 2y + 3z = -10 3x -5y + 2z = -4
Приведенное выше уравнение можно решить с помощью библиотеки Numpy следующим образом:
Уравнение 2:
A = np.array([[4, 3, 2], [-2, 2, 3], [3, -5, 2]]) B = np.array([25, -10, -4]) X = np.linalg.inv(A).dot(B) print(X)
В приведенном выше скрипте методы linalg.inv()
и linalg.dot()
соединены вместе. Переменная X
содержит решение для уравнения 2 и печатается следующим образом:
[ 5. 3. -2.]
Значение для неизвестных x
, y
и z
равно 5, 3 и -2 соответственно. Вы можете подключить эти значения в Уравнение 2 и проверить их правильность.
Использование метода solve()
В предыдущих двух примерах мы использовали методы linalg.inv()
и linalg.dot()
для нахождения решения системы уравнений. Однако библиотека Numpy содержит метод linalg.dsolve ()
, который может быть использован для непосредственного нахождения решения системы линейных уравнений:
A = np.array([[4, 3, 2], [-2, 2, 3], [3, -5, 2]]) B = np.array([25, -10, -4]) X2 = np.linalg.solve(A,B) print(X2)
Выход:
[ 5. 3. -2.]
Вы можете видеть, что выход такой же, как и раньше.
Реальный Пример
Давайте посмотрим, как система линейных уравнений может быть использована для решения реальных задач.
Предположим, продавец фруктов продал 20 манго и 10 апельсинов за один день на общую сумму 350 долларов. На следующий день он продал 17 манго и 22 апельсина за 500 долларов. Если цены на фрукты оставались неизменными в оба дня, то какова была цена одного манго и одного апельсина?
Эта задача легко решается с помощью системы двух линейных уравнений.
Допустим, цена одного манго равна x
, а цена одного апельсина равна y
. Вышеприведенная проблема может быть преобразована следующим образом:
20x + 10y = 350 17x + 22y = 500
Решение приведенной выше системы уравнений показано здесь:
A = np.array([[20, 10], [17, 22]]) B = np.array([350, 500]) X = np.linalg.solve(A,B) print(X)
А вот и выход:
[10. 15.]
Результат показывает, что цена одного манго составляет 10 долларов, а цена одного апельсина-15 долларов.
Вывод
В статье объясняется, как решить систему линейных уравнений с помощью библиотеки Numpy Python. Вы можете либо использовать методы linalg.inv()
и linalg.dot()
в цепочке для решения системы линейных уравнений, либо просто использовать метод solve ()
. Предпочтительным способом является метод solve ()
.