So I was given a homework assignment that requires solving the coefficients of cubic splines. Now I clearly understand how to do the math on paper as well as with MatLab, I want to solve the problem with Python. Given an equation Ax = b where I know the values of A and b, I want to be able to solve for x with Python and I am having trouble finding a good resource to do such a thing.
Ex.
A = |1 0 0|
|1 4 1|
|0 0 1|
x = Unknown 3x1 matrix
b = |0 |
|24|
|0 |
Solve for x
Note that Ax is defined only if the number of columns of A equals the number of entries in x. The equation Ax = b is called a matrix equation. Theorem 3.
In a general case, use solve
:
>>> import numpy as np
>>> from scipy.linalg import solve
>>>
>>> A = np.random.random((3, 3))
>>> b = np.random.random(3)
>>>
>>> x = solve(A, b)
>>> x
array([ 0.98323512, 0.0205734 , 0.06424613])
>>>
>>> np.dot(A, x) - b
array([ 0., 0., 0.])
If your problem is banded (which cubic splines it often is), then there's http://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.solve_banded.html
To comment on some of the comments to the question: better not use inv
for solving linear systems. numpy.lstsq
is a bit different, it's more useful for fitting.
As this is homework, you're really better off at least reading up on ways of solving tridiagonal linear systems.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With