google-code-prettify

2006-06-12

3x3の逆行列の計算[python]

3x3の逆行列を計算する必要があったので、pythonで以下のscriptを作成。

#!/usr/pkg/bin/python

f = file('data.txt', 'r')
(a, b, c) = [float(i) for i in f.readline().split(' ')]
(p, q, r) = [float(i) for i in f.readline().split(' ')]
(x, y, z) = [float(i) for i in f.readline().split(' ')]
f.close()

# A B C
# (D E F)
# G H I

base = (a * q * z - a * r * y - p * b * z + p * c * y + x * b * r - x * c * q)
A = (q * z - r * y) / base
B = (c * y - b * z) / base
C = (b * r - c * q) / base
D = (r * x - p * z) / base
E = (a * z - c * x) / base
F = (c * p - a * r) / base
G = (p * y - q * x) / base
H = (b * x - a * y) / base
I = (a * q - b * p) / base

print "%f %f %f" % (A, B, C)
print "%f %f %f" % (D, E, F)
print "%f %f %f" % (G, H, I)

…とここまで作った後で、Numerical Python(NumPy)という便利な物がある事を知った。

# pkg_add -v py23-Numeric
$ python
>>> from Numeric import *
>>> from LinearAlgebra import *
>>> a = array(([1,2,3],[4,5,6],[7,8,9]))
>>> print inverse(a)
[[ -4.50359963e+15 9.00719925e+15 -4.50359963e+15]
[ 9.00719925e+15 -1.80143985e+16 9.00719925e+15]
[ -4.50359963e+15 9.00719925e+15 -4.50359963e+15]]

NumPyのドキュメントはこちら

0 件のコメント: