そのため、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を解く
一般的なケースでは、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
は少し異なり、フィッティングに役立ちます。
これは宿題なので、少なくとも三重対角線形システムを解く方法を読んでおくとよいでしょう。
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)
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.])