2017-12-13 20 views
0

私はnumpyでlinalgを使って、符号付き実数の行列の固有値と固有ベクトルを計算しています。 私はthis previous questionを読みましたが、依然として固有ベクトルの正規化を把握していません。ここで は一例であるストレートオフWikipedia:numpyでの固有ベクトルの正規化

import numpy as np 
    from numpy import linalg as la 

    a = np.matrix([[2, 1], [1, 2]], dtype=np.float) 

    eigh_vals, eigh_vects = np.linalg.eig(a) 

    print 'eigen_values=' 
    print eigh_vals 

    print 'eigen_vectors=' 
    print eigh_vects 

固有値は1であり、固有ベクトル3. 我々は[1、-1]と[1、1]、私が手のスカラー倍を期待:

eig_vals= 
    [ 3. 1.] 
    eig_vets= 
    [[ 0.70710678 -0.70710678] 
    [ 0.70710678 0.70710678]] 

私は1/sqrt(2)因子がノルム= 1であることを理解していますが、それはなぜですか? 正規化を「オフ」にすることはできますか? ありがとう!

+0

スイッチを切った場合の結果はどうでしょうか?さもなければ 'eig_vets.dot(eig_vals).dot(eig_vets.conj().T)'はあなたに正しい答えを与えません。 – percusse

答えて

0

Wikipediaの記事の最初の固有ベクトルのためのキーメッセージは、V1 = -V2有する任意の非ゼロベクトルは、この方程式を解く

あります。

実際の解決策はV1 = [x, -x]です。ベクトルV1 = [1, -1]をピックすることは、人間の目を喜ばせるかもしれませんが、ベクトルV1 = [104051, -104051]または他の実際の値を選択することとまったく同じです。

実際には、V1 = [1, -1]/sqrt(2)をピッキングすることは、であり、最も好ましくは、です。 V1の可能なベクトルのうち、単位長であるのは唯一のベクトルです。代わりに、単位長さのあなたが1をする最初の値を好む場合sympyはあなたのためのオプションである場合

しかし、あなたは

eigh_vects /= eigh_vects[:, 0] 
0

を行うことができますが、あまり積極的に正常化するために表示されます。

import sympy 
a = sympy.Matrix([[2, 1], [1, 2]]) 
a.eigenvects() 
# [(1, 1, [Matrix([ 
# [-1], 
# [ 1]])]), (3, 1, [Matrix([ 
# [1], 
# [1]])])] 
関連する問題