トピックス プログラム、シミュレーション 数学

pythonを使えば1行で、固有値と固有ベクトルを算出

投稿日:

固有値固有値ベクトルpythonで可視化するWebサイトを見つけました。ちょうど左図のように重なった時固有値ベクトルとその何倍か固有値になるわけです。動いているアニメーションなので、一致する場面を切り取るのに苦労しました。

Webサイトはここです → https://qiita.com/kenmatsu4/items/2a8573e3c878fc2da306

当方、pythonをしばらく使用していなかったら、Matplotlibにあるanimationが動作しなくなっため、上記プログラムが正常に動作するかどうかは確認できていません。皆さんの方で確認してみてください。 Windowsによるエラーのようで、OSの更新によるものかもしれません。 あるいは、機械学習のTensorflowが動作しないため、anacondaの環境を変えたせいかもしれません。さきほどanacondaをアンインストールしたら50分もかかってしまいました。 また新しくインストールし直そう思いますが、ソフトのバージョンアップするといろいろトラブルが生じて困りものです。特にWindowsの更新は。愚痴ですが。

昨日まで手計算で固有値を計算していましたが、pythonのライブラリーにあるnumpyを用いると計算してくれます。 上述サイトの下の方にあります。 その部分だけを抜き出してpythonを実行してみました(animationを使わなければ動きました)。下にそのプログラムを載せておきます。行列A(2 1 -0.5 -1.5)固有値固有ベクトルを求めます。 「np.linalg.eig()」というコマンド1行で、固有値(la)固有ベクトル(v)を算出します。 Webサイトでは、「print "la", la」「print"v"」となっていますが、()をつけないとエラーになりますので、下のように()を書き入れてください。いかがですか?  可視化すると固有ベクトルがイメージできますね。 このサイトの真中に平行四辺形の図がありますが、以前私が説明したベクトルの矢印の部分だけを描いたものです。

確かに1行で固有値や固有ベクトルをを算出するライブラリがあって便利ですが、皆さんには原理的なことを理解した上で利用して欲しいと思います。そのための可視化はお勧めします。

import numpy as np
A = [[ 2, 1],
[-0.5,-1.5]]

la, v = np.linalg.eig(A)
print ("la",la)
print ("v",v)

 

-トピックス, プログラム、シミュレーション, 数学

Copyright© 進化するガラクタ , 2024 All Rights Reserved Powered by STINGER.