0

このペーパーで説明されているシステムを実装していますが、少し行き詰っています。私は最近テンソル/固有値などに遭遇しただけなので、これが少し単純であればすみません!

2x2 テンソルが与えられた場合、その主固有ベクトルと副固有ベクトルを計算するにはどうすればよいですか?

C# に簡単に変換できる実装のボーナス ポイント ;)

4

1 に答える 1

2

(私は MATLAB 行列表記法を使用しています。セミコロンは「新しい行」を意味します。)

[u;v] は [ab; v] の固有ベクトルです。[ab; cd] 固有値 t の場合 cd] [u;v] = t[u;v]。つまり、au+bv=tu および cu+bv=tv; つまり、(at)u+bv=0 かつ cu+(dt)v=0 です。これに自明ではない解がある場合、それはこれらの 2 つの方程式が定数係数を除けば同じであるためです。あなたの固有ベクトルは [u;v] = [b;ta] です。(もちろん、一定の係数までしか一意ではありません。)

固有値は、これが可能な t の値です。つまり、これらの 2 つの方程式は定数係数を除けば同じです。これは、行列 [at b; c dt] は特異であり、行列式がゼロであることを意味し、(at)(dt)-bc=0 を意味し、t^2 - (a+d)t + (ad-bc) = 0 を意味します。

そのため、固有値の方程式を解いてから、上で説明した方法で固有ベクトルを取得します。

固有値は複雑な場合があります (たとえば、回転の場合)。その場合、複雑な固有ベクトルも得られます。これは、A,v が実数で Av=kv が実数でなく、k が実数ではないため、正しいです。

2 つの警告。

  1. 一部の行列には、2 つの等しい固有値があります。それらは、2 つの独立した固有ベクトルを持つ場合と持たない場合があります。行列が恒等行列の定数倍である場合 -- [k 0;] の形式です。0 k] -- その場合、2 つの独立した固有ベクトルがあり、実際には任意の 2 つの独立したベクトルで十分です。すべてが固有ベクトルであるためです。そうしないと、固有ベクトルが 1 つしかなく、固有ベクトルが 2 つあることに依存する定理やアルゴリズムは失敗する可能性があります。これは、例えば、[1 k; 0 1]。

  2. 次元が 2 を超える場合、この方法は望ましくありません。固有ベクトルと固有値を計算するはるかに優れた (しかしより複雑な) 方法があり、「正しい」数の独立した固有ベクトルを取得できない可能性がある方法は、より広範です。

于 2011-03-17T15:43:40.583 に答える