Библиотеку Numpy можно использовать для выполнения множества математических / научных операций, таких как матричное скрещивание и скалярное произведение, поиск значений синуса и косинуса, преобразование Фурье и манипуляции с формой и т. Д. Слово Numpy - это сокращенное обозначение для "Числового Python" .
В этой статье вы увидите, как решить систему линейных уравнений с помощью библиотеки Python Numpy.
Что такое система линейных уравнений?
Википедия определяет систему линейных уравнений как:
В математике система линейных уравнений (или линейная система) - это набор двух или более линейных уравнений, включающих один и тот же набор переменных.
Конечная цель решения системы линейных уравнений - найти значения
неизвестных переменных. Вот пример системы линейных уравнений с двумя
неизвестными переменными x
и y
:
Уравнение 1:
4x + 3y = 20
-5x + 9y = 26
Чтобы решить указанную выше систему линейных уравнений, нам нужно найти
значения переменных x
и y
Есть несколько способов решить такую
систему, например, исключение переменных, правило Крамера, метод
сокращения строк и матричное решение. В этой статье мы рассмотрим
матричное решение.
В матричном решении решаемая система линейных уравнений представляется в
виде матрицы AX = B
Например, мы можем представить уравнение 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
в
уравнении 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 и проверить их
правильность.
Использование метода resolve ()
В двух предыдущих примерах мы использовали linalg.inv()
и
linalg.dot()
для поиска решения системы уравнений. Однако библиотека
Numpy содержит метод linalg.solve()
, который можно использовать для
непосредственного поиска решения системы линейных уравнений:
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 долларов.
Заключение
В статье объясняется, как решить систему линейных уравнений с помощью
библиотеки Python Numpy. Вы можете использовать либо linalg.inv()
и
linalg.dot()
методу в цепи , чтобы решить систему линейных уравнений,
или вы можете просто использовать solve()
метод. Предпочтительным
способом является метод solve()