web-dev-qa-db-ja.com

行列の乗算、Ax = bを解き、xを解きます

そのため、3次スプラインの係数を解く必要がある宿題が与えられました。これで、数学を紙の上で行う方法とMatLabを使用して方法を明確に理解できたので、Pythonで問題を解決したいと考えています。 Aとbの値がわかっている方程式Ax = bが与えられた場合、xをPython=で解決できるようにしたいのですが、そのようなことを行うための適切なリソースを見つけるのに苦労しています。 。

例.

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

x = Unknown 3x1 matrix

b = |0 |
    |24| 
    |0 |

Xを解く

12
Scalahansolo

一般的なケースでは、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.])

問題がバンディングされている場合(多くの場合、3次スプラインはそうです)、次のようになります http://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.solve_banded.html

質問へのコメントのいくつかにコメントするには:より良いしない線形システムを解くためにinvを使用します。 numpy.lstsqは少し異なり、フィッティングに役立ちます。

これは宿題なので、少なくとも三重対角線形システムを解く方法を読んでおくとよいでしょう。

12
ev-br

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)
4
BushMinusZero

Zhenyaのコードに加えて、np.dot関数を使用することも直感的にわかるかもしれません。

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.])
2
moldovean