#!/usr/bin/env python # coding: utf-8 # ### eigenvectsに関するコメント # # 最後の固有値を求めるeigenvectsで失敗するかもしれません. # これはsympyのversionによるようです.1.6.1ではダメです. # それまでのは行けそうです. # # 上の方で,対角ベクトルを与えるところで, # Rationalを使うとちゃんと求めてくれます. # ```python # #V = [1/5,1,1/2,1/3,1/4,1/2,1] # V = [Rational(1,5),1,Rational(1,2),Rational(1,3),Rational(1,4),Rational(1,2),1] # ``` # # これに関する問い合わせと開発者の反応は[Githubのissue](https://github.com/sympy/sympy/issues/20351) の通りです. # この辺りがOSS開発ソフトで時々おこる問題です. # そういうものだということを覚悟して, # いくつかのライブラリや他のソフトで結果をクロス検証することを心がけてください. # # <2020-11-02 月> # # In[1]: from sympy import * init_printing() M = Matrix([[0, 1, 1, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0], [0, 1, 1, 0, 1, 0, 0], [1, 0, 1, 1, 0, 1, 0], [1, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0, 0]]) M # In[2]: Mt = M.T Mt # In[43]: #V = [1/5,1,1/2,1/3,1/4,1/2,1] V = [Rational(1,5),1,Rational(1,2),Rational(1,3),Rational(1,4),Rational(1,2),1] VA = diag(*V) VA # In[44]: trans_mat = Mt*VA trans_mat # In[50]: trans_mat.eigenvects(error_when_incomplete=False) v_all = trans_mat.eigenvects(error_when_incomplete=False) print(v_all) # In[52]: v = Matrix(trans_mat.eigenvects(error_when_incomplete=False)[1][2]) print(v) # In[53]: v_n = v.norm().evalf() for i in range(0,6): print(v[i]/v_n) # In[ ]: