Матричное умножение, решить Ax = B решить для x

поэтому мне дали домашнее задание, которое требует решения коэффициентов кубических сплайнов. Теперь я четко понимаю как делать математику на бумаге, а также с MATLAB, я хочу решить проблему с Python. Учитывая уравнение Ax = b, где я знаю значения A и b, Я хочу иметь возможность решить для x с Python, и у меня возникли проблемы с поиском хорошего ресурса для такой вещи.

Ex.

A = |1 0 0|
    |1 4 1|
    |0 0 1|

x = Unknown 3x1 matrix

b = |0 |
    |24| 
    |0 |

решить для x

3 ответов


В общем случае, использовать 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.])

если ваша проблема связана (какие кубические сплайны она часто), то есть http://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.solve_banded.html

чтобы прокомментировать некоторые комментарии к вопросу: лучше не использовать inv для решения линейных систем. numpy.lstsq немного отличается, это более полезно для установки.

как это домашнее задание, вы действительно лучше, по крайней мере, читать о способах решения трехмерных линейных систем.


Numpy является основным пакетом для научных вычислений в Python. Если вы являетесь пользователем windows, загрузите его здесь:http://www.lfd.uci.edu / ~gohlke / pythonlibs / #numpy еще следуйте этим инструкциям:http://www.scipy.org/install.html.

import numpy
A = [[1,0,0],[1,4,1],[0,0,1]]
b = [0,24,0]
x = numpy.linalg.lstsq(A,b)

в дополнение к коду Жени, вы также можете найти его интуитивно понятным для использования np.функция точки:

import numpy as np
A = [[1,0,0],
    [1,1,1],
    [6,7,0]]
b = [0,24,0]
# Now simply solve for x
x = np.dot(np.linalg.inv(A), b) 
#np.linalg.inv(A)  is simply the inverse of A, np.dot is the dot product
print x

Out[27]: array([  0.,   0.,  24.])