Hatena::ブログ(Diary)

備忘録として

2013-10-06

Python の数値計算ライブラリで固有ベクトルを求める

そうだ! 固有ベクトルを求めよう!

SymPy で求めよう.

import sympy
matrix = sympy.Matrix([[1,1,2],[0,2,-1],[0,0,3]])
matrix
matrix.eigenvals()
matrix.eigenvects()

出力

Matrix([
[1, 1,  2],
[0, 2, -1],
[0, 0,  3]])

{1: 1, 2: 1, 3: 1}

[(1, 1, [Matrix([
[1],
[0],
[0]])]),
 (2, 1, [Matrix([
[1],
[1],
[0]])]),
 (3, 1, [Matrix([
[1/2],
[ -1],
[  1]])])]

NumPy で求めよう.

import numpy
matrix = numpy.array([[1,1,2],[0,2,-1],[0,0,3]])
matrix
(vals,vects) = numpy.linalg.eig(matrix)
(vals,vects)

出力

array([[ 1,  1,  2],
       [ 0,  2, -1],
       [ 0,  0,  3]])

(array([ 1.,  2.,  3.]),

 array([[ 1.        ,  0.70710678,  0.33333333],
       [ 0.        ,  0.70710678, -0.66666667],
       [ 0.        ,  0.        ,  0.66666667]]))

SciPy で求めよう.

import scipy
from scipy import linalg
matrix = scipy.mat([[1,1,2],[0,2,-1],[0,0,3]])
matrix
linalg.eig(matrix)

出力

matrix([[ 1,  1,  2],
        [ 0,  2, -1],
        [ 0,  0,  3]])

(array([ 1.+0.j,  2.+0.j,  3.+0.j]),

 array([[ 1.        ,  0.70710678,  0.33333333],
       [ 0.        ,  0.70710678, -0.66666667],
       [ 0.        ,  0.        ,  0.66666667]]))

SymPy では固有値が何重の解になっているか,も一緒に出してくれた.
NumPy では固有ベクトルを正規化して出してくれた.
SciPy では複素数の範囲で固有値を探してくれ,固有ベクトルを正規化して出してくれた.
あと,NumPy と SciPy はインデントつけて出してくれたので見やすい.

さらさら 2013/12/18 15:31
初めまして、Python をはじめたばかりです。
数値計算をしたくて困っています、是非教えて頂けませんか?
以下を計算したいのですが教えて頂けませんか?
10kmまでは150円、10〜20Kmまでは1kmあたり30円、
21〜40kmまでは1kmあたり20円…と加算するものとする。
距離を配列D、料金を配列Pを用いてあらわし、
35kmの時の料金を求める。(1km未満は切り上げる) 

1 10     1 150
2 20     2  30
3 40     3  20
4 80     4  15
5 160    5  10
配列 D       配列 P

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/zfhrp7/20131006/1380990972
リンク元