NumPy使ってn元一次の連立方程式といてみた
数学用語の使い方は突っ込むんじゃない!
NumPyの行列でといてみた。行列習ってないけど。
というわけで、行列とは何かを考える野暮大変なことはしない。
InputとOutput!これから習うんだから行列は華麗にスルー。
たとえば、
のx,yを求めてみる。
ちなみに解は、になる。
どうやらこれは行列を使って
とあらわせるらしい。ちょっとかじった行列の掛け算考えてもまぁそうか。
で、このとを与えるとxとyを出す関数がNumpyにはある。
どうやってやってるのかはよくわかんないけど。逆行列?なにそれ。まぁそのうち行列勉強するです。
とりあえずNumPyをダウンロードしてインスコ。
それで、インタラクティブシェルを開いてこんな風に打っておく。
>>> from numpy import * >>> from numpy.linalg import solve
さて、見てわかるとおり二つの行列を与えると解を返すsolveです。
次に、とをpythonであらわしてみる。
>>> a = array([[0.5, -0.5], [0.5, 1]]) >>> b = array([1, 2])
どうやら、NumPyではarray([列のリスト(行),列のリスト(行)・・・])とあらわすっぽい。
それで最後に
>>> x = solve(a, b) >>> x array([ 2.66666667, 0.66666667])
できあがり。
だし、なので問題無いっぽい。
めでたしめでたし。
ちなみに。
今回のaの行列は、列の数と行の数が同じ、つまり正方形の形をしている必要があり、
bの行列は列の数が1で行の数はaの行の数と同じである必要がある。
じゃないとsolveに与えたときにエラー吐く。
なぜかっていうのは想像だけど、
aの行列は列の数がn元一次方程式のnを示すからだと思う。
二元一次の連立方程式に必要な式の数は普通xとyの二文字を使ってるから2だし、
三元一次の連立方程式に必要な式の数は普通xとyとzの三文字を使ってるから3だし。
bの行列の列の数に関しては当たり前な気がする。
・・記事を書いた時間の80%はTeXを調べることに費やしています。
はてな記法便利なんだけどねー
参考資料