Eigensystem[m]
正方行列 m の固有値と固有ベクトルのリスト{values,vectors}を与える.
Eigensystem[{m,a}]
a についての m の一般化された固有値と固有ベクトルを与える.
Eigensystem[m,k]
m の最初の k 個の固有値に対する固有値と固有ベクトルを与える.
Eigensystem[{m,a},k]
最初の k 個の一般化された固有値と固有ベクトルを与える.
Eigensystem
Eigensystem[m]
正方行列 m の固有値と固有ベクトルのリスト{values,vectors}を与える.
Eigensystem[{m,a}]
a についての m の一般化された固有値と固有ベクトルを与える.
Eigensystem[m,k]
m の最初の k 個の固有値に対する固有値と固有ベクトルを与える.
Eigensystem[{m,a},k]
最初の k 個の一般化された固有値と固有ベクトルを与える.
詳細とオプション
- 行列 m が近似実数または近似複素数を含むとき,Eigensystemは固有値と固有ベクトルを数値で求める.
- 近似数値行列 m について,固有ベクトルは正規化される. »
- 厳密行列あるいは記号行列 m については,固有ベクトルは正規化されない. »
- 与えられるすべての非零の固有ベクトルは独立している.固有ベクトルの数が,非零の固有値の数に一致する場合,対応する固有値と固有ベクトルはそれぞれのリストで対応する位置に置かれる.固有値は固有ベクトル行列の行に対応する.
- 独立した固有ベクトルの数を上まわる数の固有値がある場合,余った固有値はそれぞれゼロのベクトルとペアにされる. »
- 固有値が数値のときは,その絶対値の降順でソートされる.
- この固有値と固有ベクトルは,行列方程式m.Transpose[vectors]==Transpose[vectors].DiagonalMatrix[values]を満たす. »
- 一般化された有限な固有値と固有ベクトルはm.Transpose[vectors]==a.Transpose[vectors].DiagonalMatrix[values]を満たす. »
- 通常の固有値は常に有限である.一般化された固有値は無限のこともある.無限の一般化された固有値は
である
に相当する. » - 行列 m および a が次元が
のヌル空間を共有するとき,それらの一般化された固有値の
はIndeterminateとなり,一般化された固有ベクトルのリスト中の0ベクトルと対になる. » - {vals,vecs}=Eigensystem[m]は vals と vecs がそれぞれ固有値と固有ベクトルになるように設定するために使うことができる. »
- Eigensystem[m,k]は,数値の固有値については絶対値が最大で固有ベクトルに対応する k 個の固有値を与える.
- Eigensystem[m,-k]は絶対値が最小で固有ベクトルに対応する k 個の固有値を与える.
- Eigensystem[m,spec]は,Take[…,spec]をEigensystem[m]の各要素に適用することに等しい.
- Eigensystem[m,UpTo[k]]は k 個の固有値と対応する固有ベクトルを,あるいはできるだけ多くのそれらを与える.
- EigensystemでSparseArrayオブジェクトおよび構造化配列を使うことができる.
- Eigensystemのオプションと設定値
-
Cubics False 三次方程式を解く際に累乗根を使うかどうか Method Automatic 使用するメソッドを選択する Quartics False 四次方程式を解く際に累乗根を使うかどうか ZeroTest Automatic 式がいつゼロになるかを調べる - ZeroTestオプションは,厳密行列および記号行列のみに使うことができる.
- 近似数値行列についての明示的なMethod設定
-
"Arnoldi" いくつかの固有値を求めるためのArnoldi反復法 "Banded" エルミート行列のための直接帯行列ソルバ "Direct" 全固有値を求めるための直接法 "FEAST" 区間内の固有値を求めるためのFEAST反復法(エルミート行列のみに適用可) - "Arnoldi"法は,対称行列あるいはエルミート行列に適用された際には,Lanczos法としても知られている.
- "Arnoldi"法および"FEAST"法はメソッドは,サブオプションMethod->{"name",opt1->val1,…}を取る.これは,Methodのサブセクションで見ることができる.
例題
すべて開く すべて閉じる例 (5)
Eigensystem[{{-3, 2}, {-15, 8}}]vals および vecs を,それぞれ固有値および固有ベクトルと定める:
m = {{1, 2}, {3, 4}};
{vals, vecs} = Eigensystem[m];valsvecs各固有ベクトルに m を掛けた結果は,対応する固有値のスカラー倍になる:
{m.Subscript[vecs, [[1]]] == Subscript[vals, [[1]]]Subscript[vecs, [[1]]], m.Subscript[vecs, [[2]]] == Subscript[vals, [[2]]]Subscript[vecs, [[2]]]}Eigensystem[{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}]{val, vec} = Eigensystem[{{1.1, 2.2, 3.25}, {0.76, 4.6, 5}, {0.1, 0.1, 6.1}}];valvec//MatrixFormEigensystem[{{a, b}, {c, d}}]スコープ (20)
基本的な用法 (6)
MatrixForm /@ Eigensystem[Table[N[1 / (i + j + 1), 18], {i, 3}, {j, 3}]]Eigensystem[Table[N[1 / (i + j + 1), 18], {i, 3}, {j, 3}]]Eigensystem[{{1.1 - .2I, 2.2, 3.25}, {0.76, 4.6, 5 - 2I}, {0.1, 0.1 + I, 6.1}}]Eigensystem[{{(1/3), (1/2), (3/5)}, {(1/2), (4/5), 1}, {(3/5), 1, (9/7)}}]Eigensystem[{{π, (1/3)}, {I, 5}}]Eigensystem[(| | | |
| - | - | - |
| a | 2 | 0 |
| 2 | 3 | 1 |
| 0 | 1 | 7 |)]m = RandomReal[{0, 5}, {100, 100}];Eigensystem[m] ;//Timing固有系の部分集合 (5)
{vals, vecs} = Eigensystem[Table[If[Abs[i - j] < 3, 1.0, 0], {i, 100}, {j, 100}] , 3];ListPlot[vecs, PlotLegends -> vals]Eigensystem[Table[N[1 / (i + j + 1), 12], {i, 6}, {j, 6}], -3]最も大きい4つの固有値(それより少ない場合はできるだけたくさん)の固有系を求める:
Eigensystem[(| | | |
| ----- | ----- | ----- |
| (1/3) | (1/4) | (1/5) |
| (1/4) | (1/5) | (1/6) |
| (1/5) | (1/6) | (1/7) |), UpTo[4]]固有系の部分集合を抽出するときは,繰返された固有値が考慮される:
mat = {{(7/2), 0, (1/2), 0}, {0, 3, 0, 1}, {(1/2), 0, (7/2), 0}, {0, 1, 0, 3}};Eigensystem[mat]Eigensystem[mat, 3]Eigensystem[mat, -3]独立固有ベクトルより多くの固有値がある場合はゼロベクトルが使われる:
Eigensystem[{{2, 1, 0}, {0, 2, 0}, {0, 0, 1}}]一般化された固有値 (4)
a = {{1., 2.}, {3., 4.}};b = {{1., 4.}, {9., 16.}};Eigensystem[{a, b}]a = {{1, 1, 1}, {1, 0, 1}, {0, 0, 1}};b = {{0, 1, 1}, {0, 1, 1}, {1, 0, 0}};Eigensystem[{a, b}]Eigensystem[N[{a, b}, 20]]//Chopa = {{x, 1 + x}, {1 - x, x}};b = {{1, 1}, {1, 1}};Eigenvectors[{a, b}]最も小さい2つの一般化された固有値と対応する一般化された固有ベクトルを求める:
a = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
b = {{11, 12, 13}, {1, 15, 16}, {17, 18, 19}};
Eigensystem[{a, b}, -2]特殊行列 (5)
SparseArray[{{1, 3} -> 1, {2, 2} -> 2, {3, 1} -> 3, {4, 2} -> 5}, {4, 4}]Eigensystem[%]SparseArray[Band[{1, 1}, {-1, -1}] -> {{{1, 2}, {2, 1}}}, {4, 4}]Eigensystem[%]SymmetrizedArray[{{1, 1} -> 2.2, {1, 2} -> 1.1, {3, 2} -> 5.7}, {3, 3}, Symmetric[All]]Eigensystem[%]QuantityArray[{{1, 2}, {3, 4}}, "Meters"]QuantityArrayオブジェクトの単位は固有値に含まれるので,固有ベクトルは無次元になる:
Eigensystem[%]IdentityMatrix[n]のすべての固有値は1であり,その固有ベクトルは
の標準基底を構成する:
Eigensystem[IdentityMatrix[4]]HilbertMatrixの固有ベクトル:
Eigensystem[HilbertMatrix[3]]行列がまず数値化されると,固有ベクトルは大きく変わる(固有値は変わらない):
Eigensystem[N@HilbertMatrix[3]]これは,数値入力に対して固有ベクトルが正規化されるためである:
Norm /@ Last[%]CenteredInterval 行列の固有系:
SeedRandom[777];(m = Map[CenteredInterval, RandomReal[{-10, 10}, {3, 3}, WorkingPrecision -> 10], {2}])//MatrixForm{vals, vecs} = Eigensystem[m]ranrep[e_CenteredInterval] := e["Center"] + RandomInteger[{-1000, 1000}] / 1000 e["Radius"]
(mrep = Map[ranrep, m, {2}])//MatrixForm{rvals, rvecs} = Eigensystem[mrep]ベクトルの順序付けおよびスケーリングを行った後で,vals が rvals を含み vecs が rvecs を含むことを検証する:
MapThread[IntervalMemberQ, {vals, rvals[[{3, 1, 2}]]}]MapThread[IntervalMemberQ, {vecs, rvecs[[{3, 1, 2}]] * (Last[#]["Center"]& /@ vecs)}, 2]オプション (11)
Cubics (1)
m = Table[{1, -1, 2} ^ j, {j, 3}]一般に,厳密な3×3行列の場合,結果はRootオブジェクトで与えられる:
er = Eigensystem[m]結果を累乗根の形で得たいのであれば,Cubicsオプションを使うとよい:
ec = Eigensystem[m, Cubics -> True]Rootオブジェクトによる結果の方が,続く数値評価には適している:
N[er]N[ec]Method (9)
"Arnoldi" (6)
Arnoldi法は,機械精度および任意精度の行列に使うことができる.Arnoldi法の実装は,"ARPACK"ライブラリに基づいている.これは,大規模な疎行列に最もに有効である.
"Arnoldi"法では,以下のサブオプションを指定することができる.
| "BasisSize" | Arnoldi基底の大きさ | |
| "Criteria" | 使用する基準 | |
| "MaxIterations" | 反復の最大数 | |
| "Shift" | Arnoldiシフト | |
| "StartingVector" | 反復を始める最初のベクトル | |
| "Tolerance" | 反復の終了に使用される許容度 |
| "Magnitude" | Absに基づく | |
| "RealPart" | Reに基づく | |
| "ImaginaryPart" | Imに基づく | |
| "BothEnds" | 実数値対称行列スペクトルの両端からのいくつかの固有値 |
さまざまな"Criteria"設定を使って,最大固有ペアを計算する.行列 m は,固有値
を持つ:
d = DiagonalMatrix[{1, 0.8 + 0.8I, I}];
t = {{1, 2, 0}, {0, 3, 2}, {1, 0, 4}};
m = t.d.Inverse[t];デフォルトで,"Criteria"->"Magnitude"は最大規模の固有ペアを選ぶ:
Eigensystem[m, 1, Method -> "Arnoldi"]Eigensystem[m, 1, Method -> {"Arnoldi", "Criteria" -> "RealPart"}]Eigensystem[m, 1, Method -> {"Arnoldi", "Criteria" -> "ImaginaryPart"}]d = DiagonalMatrix[{1, 0.8, -1, 2}];
t = Orthogonalize[{{1, 2, 0, 1}, {0, 3, 2, -2}, {1, 0, 4, -1}, {0, 1, 0, 1}}];
m = t.d.Transpose[t];Eigensystem[m, 2, Method -> {"Arnoldi", "Criteria" -> "BothEnds"}]d = DiagonalMatrix[{1, -1, 0.}];
t = {{1, 2, 0}, {0, 3, 2}, {1, 0, 4}};
m = t.d.Inverse[t];Eigensystem[m, 1, Method -> {"Arnoldi", "StartingVector" -> {1, 0, 0}}]Eigensystem[m, 1, Method -> {"Arnoldi", "StartingVector" -> {0, 0, 1}}]"Shift"->μ を使い,行列
を
に変換することで固有値をシフトさせる.これで固有ベクトルが保存されるが,固有値は-μ 変化する.このメソッドは,変化した固有値を相殺する."Shift"は,一般に,最大あるいは最小規模といった選択基準なしで固有ペアを求める際に使われる:
d = DiagonalMatrix[{1, 2, 3}];
t = {{1, 2, 0}, {0, 3, 2}, {1, 0, 4}};
m = N@t.d.Inverse[t];μ = 2.1;{λl1, vl1} = Eigensystem[m - μ IdentityMatrix[3], -1, Method -> "Arnoldi"]λl1 = λl1 + μ{λl2, vl2} = Eigensystem[m, -1, Method -> {"Arnoldi", "Shift" -> μ}]Arnoldi法を使用して,2つの最小の一般化固有値と固有ベクトルを計算する:
n = 10;
s = SparseArray[{{i_, i_} -> -2., {i_, j_} /; Abs[i - j] == 1 -> 1.}, {n, n}];
m = SparseArray[{{i_, i_} -> 1}, {n, n}];
Eigensystem[{s, m}, -2, Method -> "Arnoldi"]"Banded" (1)
帯行列法は,実数対称または複素数の機械精度エルミート行列に使うことができる.この方法はすべての固有ペアを求めるのに最適である.
m = SparseArray[{{i_, i_} -> -2., {i_, j_} /; Abs[i - j] == 1 -> 1.}, {2000, 2000}];MatrixPlot[m]{λl, vl} = Eigensystem[m, 2, Method -> "Banded"];λlNorm[m.Transpose[vl] - Transpose[vl].DiagonalMatrix[λl]]"FEAST" (2)
FEAST法は,実対称機械精度行列あるいは複素エルミート機械精度行列に使うことができる.これは,指定された区間における固有値を求める際に最も有効である.
"FEAST"法では,次のサブオプションを指定することができる,
| "ContourPoints" | 輪郭点数を選ぶ | |
| "Interval" | 固有値を求めるための区間 | |
| "MaxIterations" | 微調整ループの最大数 | |
| "NumberOfRestarts" | 再開の最大数 | |
| "SubspaceSize" | 部分空間の初期サイズ | |
| "Tolerance" | 微調整を停止する許容度 | |
| "UseBandedSolver" | 帯状ソルバを使うかどうか |
s = SparseArray[{{i_, i_} -> -2., {i_, j_} /; Abs[i - j] == 1 -> 1.}, {1000, 1000}];{λl, vl} = Eigensystem[s, Method -> {"FEAST", "Interval" -> {-1.0, -0.9}}]; λl区間の端点
はFEASTが固有値を求めた区間には含まれていない.
Norm[s.Transpose[vl] - Transpose[vl].DiagonalMatrix[λl]]アプリケーション (16)
固有系の幾何学 (3)
正の固有値を持つ固有ベクトルは,行列の作用を受けたときに同じ方向を指す:
m = {{1, 2}, {2, 1}};
{{λ1, λ2}, {v1, v2}} = Eigensystem[m]Graphics[{{Thick, Arrow[{{0, 0}, v1}]}, {Red, Arrow[{{0, 0}, m.v1}]}}, Axes -> True]負の固有値を持つ固有ベクトルは,行列の作用を受けたときに逆の方向を指す:
Graphics[{{Thick, Arrow[{{0, 0}, v2}]}, {Red, Arrow[{{0, 0}, m.v2}]}}, Axes -> True]a = {{-2, 2}, {2, 1}};q = {x, y}.a.{x, y}//Expand{λ, v} = Eigensystem[a]ContourPlot[Table[q == n, {n, {-9, -4, -1, 1, 4, 9}}]//Evaluate, {x, -3, 3}, {y, -3, 3}, Epilog -> (Arrow[{{0, 0}, #}]& /@ v), PlotLegends -> "Expressions"]q = 20 x ^ 2 - 16 x y + 23 y ^ 2 - 12 x z - 2 y z + 17 z ^ 2;cp = ContourPlot3D[q, {x, -1, 1}, {y, -1, 1}, {z, -1, 1}, Contours -> {10}, Mesh -> False, ContourStyle -> Opacity[.5]]CoefficientArraysを使って二次形式の対称行列を得る:
m = Normal[CoefficientArrays[q, {x, y, z}, Symmetric -> True][[3]]]{vals, vecs} = Eigensystem[N[m]]Show[cp, Graphics3D[{Thickness[0.015], Green, Table[Line[{{0, 0, 0}, vecs[[i]] * Sqrt[10 / vals[[i]]]}], {i, 1, 3}]}]]対角化 (5)
次の行列を
として対角化する.まず,
の固有値と固有ベクトルを計算する:
m = {{9, -7, 3}, {12, -10, 3}, {16, -16, 1}};Eigensystem[m]固有値と列が固有ベクトルである行列
から対角行列
を構築する:
{d = DiagonalMatrix[First[%]], p = Transpose[Last[%]]}m == p.d.Inverse[p]これで,行列の任意の関数が
として計算できるようになった.例えばMatrixPower:
MatrixPower[m, k] == p . MatrixPower[d, k].Inverse[p]同様に,MatrixExpが自明となって
の対角要素を累乗することしか必要としなくなった:
MatrixExp[m] == p . MatrixExp[d].Inverse[p]MatrixExp[d]
を,その標準行列が行列
で与えられる線形変換とする.基底
における
の表現が対角であるという特性を持つ
の基底
を求める:
a = (| | | | |
| -- | -- | - | - |
| -6 | 4 | 0 | 9 |
| -3 | 0 | 1 | 6 |
| -1 | -2 | 1 | 0 |
| -4 | 4 | 0 | 7 |);{λ, v} = Eigensystem[a]
が固有ベクトルからなり,
が列が
の要素である行列であるとする:
b = Transpose[v]
は
の座標から標準座標に変換する.この逆変換は逆方向に変換する:
bInv = Inverse[b]bInv . a .b//MatrixForm% == DiagonalMatrix[λ]実対称行列は,
のように直交対角化可能である.ただし,
は実対角行列であり,
は直交行列である.次の行列が対象であることを確認し,次にこれを対角化する:
(s = {{1, 4, -2}, {4, 5, -3}, {-2, -3, 2}})//MatrixFormTranspose[s] == s{λ, v} = Eigensystem[s]d = DiagonalMatrix[λ]直交行列については,固有ベクトルを列に置く前に正規化する必要がある:
o = Transpose[FullSimplify[Normalize /@ v]]OrthogonalMatrixQ[o]s == o.d.Transpose[o]//FullSimplify
のとき,その行列は正規行列と呼ばれる.正規行列はユニタリ変換で対角化できる最も一般的な行列である.実対称行列
は,方程式の両辺が
なので,すべて正規行列である:
TensorExpand[ConjugateTranspose[s].s == s.ConjugateTranspose[s] == s.s, Assumptions -> s∈Matrices[{n, n}, Reals, Symmetric[{1, 2}]]](n = {{3, -1}, {1, 3}})//MatrixFormn.ConjugateTranspose[n] == ConjugateTranspose[n].nNormalMatrixQを使って確認する:
NormalMatrixQ[n]{λ, v} = Eigensystem[n]この行列の対角行列は,実対称行列とは異違って複素数値である:
(d = DiagonalMatrix[λ])//MatrixForm固有ベクトルを正規化してそれを列に置くとユニタリ行列になる:
u = Transpose[Normalize /@ v];
UnitaryMatrixQ[u]n == u.d.ConjugateTranspose[u]m = {{1, 1, 0}, {0, 1, 0}, {0, 0, 2}};
{λ, vecs} = Eigensystem[m]Count[vecs, v_ /; Norm[v] > 0] < Length[λ]Block[{nd = 0, trials = 10 ^ 4}, Do[{λ, vecs} = Eigensystem[N[RandomInteger[1, {4, 4}]]];If[Count[vecs, v_ /; Norm[v] > 0] < Length[λ], nd++], {trials}];N[nd / trials]]微分方程式と動的な系 (4)
常微分方程式の系
,
,
を解く.まず,右辺のために係数行列
を構築する:
a = {{0, 1, 0}, {0, 0, 1}, {-2, 1, 2}};{λ, v} = Eigensystem[a]d = DiagonalMatrix[Exp[t λ]]p = Transpose[v]p.d.Inverse[p] . {C[1], C[2], C[3]}DSolveValueを使って解を確かめる:
Simplify[% == DSolveValue[{x'[t] == y[t], y'[t] == z[t], z'[t] == -2x[t] + y[t] + 2z[t]}, {x[t], y[t], z[t]}, t]]粒子が平面の力場で動いており,その位置ベクトル
が
と
を満足するとする.ただし,
と
は以下であるとする.
のときのこの初期問題を解く:
a = (| | |
| -- | -- |
| 4 | -5 |
| -2 | 1 |);Subscript[x, 0] = (| |
| --- |
| 1.9 |
| 3.6 |);{λ, v} = Eigensystem[a]系の一般解は
である.LinearSolveを使って係数を決定する:
c = LinearSolve[Transpose[v], Subscript[x, 0]]x[t_] = (c Exp[λ t]).vDSolveValueを使って解を確かめる:
x[t] == DSolveValue[{{u1'[t], u2'[t]} == a.{u1[t], u2[t]}, {u1[0], u2[0]} == Subscript[x, 0]}, {u1[t], u2[t]}, t] //Simplify//Chopa = (| | | |
| --- | --- | --- |
| .90 | .01 | .09 |
| .01 | .90 | .01 |
| .09 | .09 | .90 |);固有値と固有ベクトルを求め,Chopを使って小さい数値誤差を切り捨てる:
{{Subscript[λ, 1], Subscript[λ, 2], Subscript[λ, 3]}, {Subscript[v, 1], Subscript[v, 2], Subscript[v, 3]}} = Chop[Eigensystem[a]]x[k_] = Sum[C[i] Subsuperscript[λ, i, k]Subscript[v, i], {i, 3}]x[k] == a.x[k - 1]//Simplify//Chopleqn = {Derivative[1][x][t] == -3(x[t] - y[t]), Derivative[1][y][t] == -x[t] z[t] + 26 x[t] - y[t], Derivative[1][z][t] == x[t] y[t] - z[t]};lj = D[leqn[[All, 2]], {{x[t], y[t], z[t]}}]eqp = Solve[leqn /. {x'[t] -> 0, y'[t] -> 0, z'[t] -> 0}, {x[t], y[t], z[t]}]第1象限の平衡点におけるヤコビ行列の固有値と固有ベクトルを求める:
{vals, vecs} = Eigensystem[N[lj /. eqp[[3]]]]dir の方向にある pt の小さい摂動から逆方向に積分する関数:
st[pt_, dir_] := First[{x[t], y[t], z[t]} /. NDSolve[{leqn, Thread[{x[0], y[0], z[0]} == pt + 10^-6dir]}, {x, y, z}, {t, 0, -4}]];pt = {x[t], y[t], z[t]} /. eqp[[3]];dir = vecs[[3]];sr = ParametricPlot3D[Evaluate[{st[pt, dir], st[pt, -dir]}], {t, 0, -4}, PlotStyle -> Table[{Thickness[0.015], Red}, {2}]]pt = {x[t], y[t], z[t]} /. eqp[[2]];{vals, vecs} = Eigensystem[N[lj /. eqp[[2]]]];
dir = vecs[[3]];sl = ParametricPlot3D[Evaluate[{st[pt, dir], st[pt, -dir]}], {t, 0, -4}, PlotStyle -> Table[{Thickness[0.015], Green}, {2}]];Show[{ParametricPlot3D[Evaluate[{x[t], y[t], z[t]} /. NDSolve[{leqn, x[0] == 5, y[0] == 0, z[0] == 25}, {x, y, z}, {t, 0, 100}]], {t, 0, 100}], sr, sl}, PlotRange -> {{-25, 25}, {-25, 25}, {0, 50}}]物理 (4)
量子力学では,状態はエルミート線形演算子による複素単位ベクトルと物理量で表される.固有値は可能な観測値を表,固有ベクトルに関する成分の二乗係数をはそれらの観測値の確率を表す.与えられたスピン演算子
と状態
について,可能な観測値とその確率を求める:
σ = (ℏ/2)(| | |
| - | -- |
| 0 | -I |
| I | 0 |);ψ = (1/Sqrt[5])(| |
| --- |
| 1 |
| 2 I |);{λ, v} = Eigensystem[σ]{e1, e2} = Normalize /@ v{Abs[e1.ψ]^2, Abs[e2.ψ]^2}//Simplify量子力学では,エネルギー演算子はハミルトニアン
と呼ばれ,エネルギーが
の状態はシュレーディンガー方程式
に従って進化する.一定磁場で
方向にスピン1粒子に対するハミルトニアンが与えられたとして,初期状態が
を表す状態
であった粒子の時点
における状態を求める:
ℋ = (Subscript[ω, 0]ℏ/Sqrt[2]) (| | | |
| - | -- | -- |
| 0 | -I | 0 |
| I | 0 | -I |
| 0 | I | 0 |);Subscript[ψ, 0] = {1, 0, 0};{{Subscript[ℰ, 1], Subscript[ℰ, 2], Subscript[ℰ, 3]}, v} = Eigensystem[ℋ]{Subscript[e, 1], Subscript[e, 2], Subscript[e, 3]} = Normalize /@ v時点
における状態はシュレーディンガー方程式に従って進化する各固有状態の和である:
ψ[t_] = Underoverscript[∑, i = 1, 3]Exp[-(I Subscript[ℰ, i]t/ℏ)]Subscript[e, i].Subscript[ψ, 0] Subscript[e, i] //FullSimplify慣性モーメントはさまざまな方向への回転に対する剛体の抵抗を表す実対称行列である.この行列の固有値は主慣性モーメントと呼ばれ,対応する固有ベクトル(必然的の直交ベクトル)は主軸である.以下の四面体の主慣性モーメントと主軸を求める:
tet = Tetrahedron[{{-1.25, -1, -0.75}, {3.75, -1, -0.75}, {-1.25, 3., -0.75}, {-1.25, -1, 2.25}}](ℐ = MomentOfInertia[tet])//MatrixForm{m, a} = Eigensystem[ℐ]a.a//ChopRegionCentroid[tet]Graphics3D[{{Opacity[.5], tet}, Arrow[{{0, 0, 0}, 3#}]& /@ a}]一般化された固有系を使って項を分離するための練成振動の正規モードを求めることができる.以下の図に示した系について考える:
フックの法則によると,これは
と
に従う.一般解の
を代入すると,以下のように,剛性行列
,質量行列
の行列方程式
が与えられる:
k = {{k1 + k2, -k2}, {-k2, k2}};
m = {{m1, 0}, {0, m2}};k = k /. {k1 -> 9.5, k2 -> 4.5};
m = m /. {m1 -> 2, m2 -> 3};{λ, v} = Eigensystem[{k, m}]{ω1, ω2} = Sqrt[λ]正規モードの解を一般化された固有ベクトル掛ける対応する指数関数として構築する:
sol1[t_] = First[v]Exp[I ω1 t];sol2[t_] = Last[v]Exp[I ω2 t];どちらもこの系についての微分方程式を満足することを確認する:
-k.sol1[t] == m.sol1''[t] && -k.sol2[t] == m.sol2''[t]//FullSimplify特性と関係 (17)
{λ, v} = Eigensystem[{{1., 2.}, {2., 1.}}]Norm /@ v厳密行列および記号行列に対して返された固有ベクトルは,単位ベクトルではないことが多い:
{λ, v} = Eigensystem[{{1, 2}, {2, 1}}]Norm /@ vEigensystem[m]は,事実上,{Eigenvalues[m],Eigenvectors[m]}に等しい:
m = RandomReal[1, {3, 3}];
Eigensystem[m] == {Eigenvalues[m], Eigenvectors[m]}固有ベクトルと固有値の両方が必要な場合はEigensystemを呼び出した方が効率的なことが多い:
m = RandomReal[1, {1000, 1000}];AbsoluteTiming[Eigensystem[m];]AbsoluteTiming[{Eigenvalues[m], Eigenvectors[m]};]m = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
{vals, vecs} = Eigensystem[m];Simplify[m.Transpose[vecs] - Transpose[vecs].DiagonalMatrix[vals]]正方行列の任意のペアは,有限固有値について一般化された類似性関係を満足する:
m = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
a = {{1, 1, 1}, {1, 2, 4}, {1, 3, 9}};
{gvals, gvecs} = Eigensystem[{m, a}];m.Transpose[gvecs] - a.Transpose[gvecs].DiagonalMatrix[gvals]//Simplify
の無限一般化固有値は
のカーネルに含まれる
の固有ベクトルに対応する:
m = {{1, 2}, {3, 2}};
a = {{1, 1}, {1, 1}};
Eigensystem[{m, a}]m.{-1, 1}a.{-1, 1}行列 m は,DiagonalizableMatrixQ[m]がTrueのときかつそのときに限って固有ベクトルの完全集合を持つ:
diag = {{17, -1 + Sqrt[3], -1 - Sqrt[3]}, {-1 + Sqrt[3], 14 + 2 Sqrt[3], 2}, {-1 - Sqrt[3], 2, 14 - 2 Sqrt[3]}};
{DiagonalizableMatrixQ[diag], Eigensystem[diag]}次の行列には,
で表される空間
についての固有ベクトルが欠けている:
nondiag = {{15, 3 + 3 Sqrt[3], 0}, {0, 15 + 3 Sqrt[3], 3}, {3 - 3 Sqrt[3], 0, 15 - 3 Sqrt[3]}};
{DiagonalizableMatrixQ[nondiag], Eigensystem[nondiag]}対角化可能行列について,Eigensystemは関数適用を固有ベクトルへの適用に簡約する:
m = N[{{0, 1, 0, -1}, {-1, 0, 1, 0}, {0, -1, 0, 1}, {1, 0, -1, 0}}];
{vals, vecs} = Eigensystem[m];Chop[Transpose[vecs].DiagonalMatrix[Exp[vals]].Inverse[Transpose[vecs]]]MatrixExpを使って行列指数関数を計算する:
MatrixExp[m]Exp[m]可逆行列
について,
と
は同じ固有ベクトルを持ちその固有値は互いに互いの逆数である:
m = {{0, 3, 7}, {0, -3, 1}, {-4, 2, -8}};
{λ, v} = Eigensystem[m]固有値は絶対値でソートされるので,以下は同じ値を与えるが順序は逆である:
{λInv, vInv} = Eigensystem[Inverse[m]];
{(1/λInv), vInv}//FullSimplify解析関数
については,
の固有値は常に固有値が
の
の固有ベクトルでもある:
m = {{1, 1, 0}, {-1, 1, 0}, {0, 0, 5}};
{λ, v} = Eigensystem[m]Eigensystem[m.m] == {λ^2, v}Eigensystem[MatrixExp[m]] == {Exp[λ], v}//FullSimplify実対称行列の固有値は実数でその固有ベクトルは直交ベクトルである:
(s = {{1, 4, -2}, {4, 0, -3}, {-2, -3, 2}})//MatrixFormSymmetricMatrixQ[s]{λ, v} = Eigensystem[s]v.Transpose[v]//Simplify実反対称行列は虚数行列でその固有ベクトルは直交ベクトルである:
(a = {{0, 4, -2}, {-4, 0, -3}, {2, 3, 0}})//MatrixFormAntisymmetricMatrixQ[a]{λ, v} = Eigensystem[a]v.ConjugateTranspose[v]//Simplifyユニタリ行列の固有値は単位円上にあり,その固有ベクトルは直交ベクトルである:
u = {{1 / Sqrt[2], I / Sqrt[2]}, {I / Sqrt[2], 1 / Sqrt[2]}};UnitaryMatrixQ[u]{λ, v} = Eigensystem[u]Abs[λ]v.ConjugateTranspose[v]//Simplifyn = {{1, 2, -1}, {-1, 1, 2}, {2, -1, 1}};NormalMatrixQ[n]{λ, v} = Eigensystem[n]v.ConjugateTranspose[v]//SimplifySingularValueDecomposition[m]は
および
の固有系から構築される:
m = (| | | |
| ---- | --- | ---- |
| -5.2 | 0 | -5 |
| 1.7 | 5.4 | -4.3 |);{u, Σ, v} = SingularValueDecomposition[m];{Subscript[λ, L], Subscript[vec, L]} = Eigensystem[m . ConjugateTranspose[m]];{u//MatrixForm, Transpose[Subscript[vec, L]]//MatrixForm}{Subscript[λ, R], Subscript[vec, R]} = Eigensystem[ConjugateTranspose[m].m];{v//MatrixForm, Transpose[Subscript[vec, R]]//MatrixForm}{Diagonal[Σ], Sqrt[Subscript[λ, L]]}m = {{-(1/Sqrt[2]), -(1/Sqrt[2])}, {(1/Sqrt[2]), -(1/Sqrt[2])}};
{λ, v} = Eigensystem[m]JordanDecomposition[m]は固有値と固有ベクトルから構築された行列
を返す:
{s, j} = JordanDecomposition[m]j == DiagonalMatrix[λ]s == Transpose[v]数値正規行列
のSchurDecomposition[n,RealBlockDiagonalFormFalse]:
n = {{1., 3., -1.}, {-1., 1., 3.}, {3., -1., 1.}};
NormalMatrixQ[n]{q, t} = SchurDecomposition[n, RealBlockDiagonalForm -> False]//Chop{λ, v} = Eigensystem[n]//Chopt 行列は対角行列で固有値の項を持ち,おそらくEigensystemとは次数が異なる:
Diagonal[t] == λq が固有ベクトルを列として持つことを確認するために,各ベクトルの最初の項を1.に設定して q と v の位相差を消去する:
Transpose[(#1/First[q])& /@ q] - (v / First /@ v)//Chop行列が次元
のヌル空間を共有するなら,それらの一般化された固有値の
はIndeterminateで固有ベクトルのリストは0で充填される:
a = {{1, 1, 1}, {1, 1, 1}, {1, 1, 1}};b = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};NullSpace[a]
の一般化された二つの固有値はIndeterminateで0ベクトルが生成される:
Eigensystem[{a, a}]NullSpace[b]MatrixRank[Join[NullSpace[a], NullSpace[b]]]したがって,
の一般化された一つの固有値はIndeterminateであり,0ベクトルが生成される:
Eigensystem[{a, b}]考えられる問題 (5)
Array[Subscript[a, ##]&, {2, 2}]Eigensystem[%]Table[ByteCount[Eigensystem[Array[Subscript[a, ##]&, {n, n}]]], {n, 4}]Eigensystem[{{7, -1}, {9, 1}}]JordanDecompositionを使って厳密に計算する:
JordanDecomposition[{{7, -1}, {9, 1}}]SchurDecompositionを使って数値的に計算する:
SchurDecomposition[N@{{7, -1}, {9, 1}}]n = 10^4;s = SparseArray[{Band[{1, 1}] -> 1., Band[{1, -1}, {-1, 1}, {1, -1}] -> 1., Band[{n / 2, 1}, {1, -1}, {0, 1}] -> 1., Band[{1, n / 2}, {-1, 1}, {1, 0}] -> 1.}, {n, n}];ArrayPlot[s, MaxPlotPoints -> 1000, ColorFunction -> (If[# == 0, White, Black]&)]MemoryConstrained[Eigensystem[s], 10 ^ 8]
最も大きい,あるいは最も小さい固有値をいくつか計算するのは大抵の場合可能である:
{vals, vecs} = Eigensystem[s, 2]; vals固有値が密接にグループ化されている場合は,疎行列に対する反復的な方法が収束しないことがある:
s = SparseArray[{{x_, y_} /; Abs[x - y] ≤ 1 -> 3. Abs[x - y] - 2.}, {1000, 1000}];{vals, vecs} = Eigensystem[s, 3];
ListPlot[vecs, PlotLabel -> vals]
期待値付近でアルゴリズムにシフトを与え,収束を加速することができる:
{vals, vecs} = Eigensystem[s, 3, Method -> {"Arnoldi", "Shift" -> -4}];ListPlot[vecs, PlotLabel -> vals]FEASTメソッドで指定された区間に与えられた端点は含まれていない.
3と9における固有値で行列を設定し,区間
内の固有値と固有ベクトルを求める:
ck = With[{n = 24}, N[SparseArray[{{i_, j_} /; Abs[i - j] == 1 :> With[{k = Min[i, j]}, Sqrt[k (n - k)]]}, {n, n}]]];
{vals, vecs} = Eigensystem[ck, Method -> {"FEAST", "Interval" -> {3., 9.}}];
valsFEASTが固有値3と9および対応する固有ベクトルを求められるように区間
を拡張する:
{vals, vecs} = Eigensystem[ck, Method -> {"FEAST", "Interval" -> {2.9, 9.1}}];
valsテクニカルノート
履歴
1988 で導入 (1.0) | 1996 で更新 (3.0) ▪ 2003 (5.0) ▪ 2014 (10.0) ▪ 2015 (10.3) ▪ 2024 (14.0)
テキスト
Wolfram Research (1988), Eigensystem, Wolfram言語関数, https://reference.wolfram.com/language/ref/Eigensystem.html (2024年に更新).
CMS
Wolfram Language. 1988. "Eigensystem." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2024. https://reference.wolfram.com/language/ref/Eigensystem.html.
APA
Wolfram Language. (1988). Eigensystem. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Eigensystem.html
BibTeX
@misc{reference.wolfram_2026_eigensystem, author="Wolfram Research", title="{Eigensystem}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/Eigensystem.html}", note=[Accessed: 11-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_eigensystem, organization={Wolfram Research}, title={Eigensystem}, year={2024}, url={https://reference.wolfram.com/language/ref/Eigensystem.html}, note=[Accessed: 11-September-2026]}