NumPy: How to solve system of linear equations
Solving of the system of linear equations is a very common task in modern science. In this short tutorial I will solve system of 4 linear equations with NumPy library in Python.
3*x1 + 2*x2 - x3 + x4 = 28
x1 - 4*x2 + 3*3 + 2*x4 = -23
2*x1 - x2 - 2*x3 - 4*x4 = 2
8*x1 + x2 - 9*x3 + 5*x4 = 25
Now, nobody solve these kind of equations as a system of equations. Everybody use matrices to solve it.
AX = B
or in more details:
3 | 2 | -1 | 1 | x1 | = | 28 |
1 | -4 | 3 | 2 | x2 | -23 | |
2 | -1 | -2 | -4 | x3 | 2 | |
8 | 1 | -9 | 5 | x4 | 25 |
Matrix solution is pretty simple
X = A-1B
where A-1 is an inverse of the A matrix. So AA-1 = I
Solving with NumPy
Solving with matrix equation
First of all, we need to prepare all data:
import numpy as np
a = np.array([[3, 2, -1, 1], [1, -4, 3, 2], [2, -1, -2, -4], [8, 1, -9, 5]])
b = np.array([28, -23, 2, 25])
Then we need to find inverse of the A matrix
inv_a = np.linalg.inv(a)
print(inv_a)
#[[ 0.27536232 0.10803689 0.10144928 -0.0171278 ]
# [ 0.23188406 -0.12911726 -0.07246377 -0.05270092]
# [ 0.24637681 0.10144928 -0.01449275 -0.10144928]
# [-0.04347826 0.03557312 -0.17391304 0.05533597]]
And then the solution will be the dot product of inverse of the matrix A to vector B. Also we can check the solution with using our vector X in our original dot product AX and check that this vector is collinear to B
x = np.linalg.inv(a).dot(b)
print(x)
# [ 5. 8. 2. -1.]
print(np.allclose(np.dot(a, x), b))
# True
Solving with build in NumPy function linalg.solve
It is not necessary to use all this linear algebra equations. NumPy already have all required functions in linalg library
import numpy as np
a = np.array([[3, 2, -1, 1], [1, -4, 3, 2], [2, -1, -2, -4], [8, 1, -9, 5]])
b = np.array([28, -23, 2, 25])
x = np.linalg.solve(a, b)
print(x) # [ 5. 8. 2. -1.]
Published: 2022-06-18 02:13:13
Updated: 2022-06-18 02:14:09