Решение систем линейных уравнений с помощью Python Numpy

Библиотеку Numpy [https://numpy.org/] можно использовать для выполнения множества математических / научных операций, таких как матричное скрещивание и скалярное произведение, поиск значений синуса и косинуса, преобразование Фурье [https: //en.wikipedia. org / wiki / Fourier_transform] и манипулирование формами и т. д. Слово Numpy - это сокращенное обозначение «Числового Python». В этой статье вы увидите, как решить систему линейных уравнений с помощью библиотеки Python Numpy. Что такое система линейных уравнений? Википедия определяет

Библиотеку 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()

comments powered by Disqus