# NumPy: Solve a System of Linear Equations

We first consider a system of linear equations in two variables $x$ and $y$.

We pick an example from the classic Hall & Knight's text Elementary Algebra^{1}.

$$ 3x + 7y = 27 \\ 5x + 2y = 16 $$

This can be put in the matrix dot product form as

$$ \begin{bmatrix} 3 & 7 \\ 5 & 2 \\ \end{bmatrix} \cdot \begin{bmatrix} x \\ y \\ \end{bmatrix} = \begin{bmatrix} 27 \\ 16 \\ \end{bmatrix} $$

If $A$ represents the matrix of coefficients, $x$ the column vector of variables and $B$ the column vector of solutions, the above equation can be shortened to

$$ Ax = B $$

The above matrix product will be defined if and only if the number of columns in the coefficient matrix $A$ is equal to the number of rows in the variable matrix $x$.

From school, most of us are familiar with solving such set of linear equations using Cramer's Rule, which involves determinants.

Python's numerical library NumPy has a function `numpy.linalg.solve()`

which solves a linear matrix equation, or system of linear scalar equation.

Here we find the solution to the above set of equations in Python using NumPy's numpy.linalg.solve() function.

` ````
import numpy as np
a = np.array([[3,7], [5,2]])
b = np.array([27,16])
x = np.linalg.solve(a, b)
print(x)
```

If the above Python script is executed, we will get the solutions in the column matrix format as

` ````
[2. 3.]
```

representing the $x$ and $y$ values respectively. So, $x = 2$ and $y = 3$.

Also you can use the `numpy.allclose()`

function to check if the solution is correct. The following should return `True`

.

` ````
np.allclose(np.dot(a, x), b)
```

# Simultaneous Equations in Three Variables

Next we consider simultaneous equations in three unknowns or variables $x$ , $y$ and $z$. We pick another example from the same book Elementary Algebra^{2} by Hall & Knight.

$$ 6x + 2y - 5z = 13 \\ 3x + 3y - 2z = 13 \\ 7x + 5y - 3z = 26 $$

We represent the above equations in the matrix form

$$ \begin{bmatrix} 6 & 2 & -5 \\ 3 & 3 & -2 \\ 7 & 5 & -3 \\ \end{bmatrix} \cdot \begin{bmatrix} x \\ y \\ z \\ \end{bmatrix} = \begin{bmatrix} 13 \\ 13 \\ 26 \\ \end{bmatrix} $$

We solve it with NumPy's `numpy.linalg.solve()`

function

` ````
import numpy as np
a = np.array([[6,2,-5], [3,3,-2], [7,5,-3]])
b = np.array([13,13,26])
x = np.linalg.solve(a, b)
print(x)
```

On executing the script, the solution is printed as a column matrix, representing the values for $x$ , $y$ and $z$ respectively.

` ````
[2. 3. 1.]
```

## Notes

- 1) H. S. Hall & S. R. Knight, Elementary Algebra. London: Macmillan & Co., Ltd., 1896. Chapter XVII: Simultaneous Equations, p. 148, Ex. 2.
- 2) Ibid., p152