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,并会与广义特征向量列表中的零向量配对. » - {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 banded matrix solver) "Direct" 求解所有特征值的直接方法 "FEAST" FEAST 迭代方法,以求解某区间内的特征值(只应用于 Hermitian 矩阵) - 当应用于对称或 Hermitian 矩阵时,"Arnoldi" 方法也称为 Lanczos 方法.
- "Arnoldi" 和 "FEAST" 方法使用子选项 Method ->{"name",opt1->val1,…},它可以在 Method 子章节中找到.
范例
打开所有单元 关闭所有单元基本范例 (5)
Eigensystem[{{-3, 2}, {-15, 8}}]m = {{1, 2}, {3, 4}};
{vals, vecs} = Eigensystem[m];valsvecs{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]求与四个最大的特征值对应的特征系统,如果没有那么多,则有多少给出多少:
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}]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" 程序库. 它对于大型稀疏矩阵很有用.
| "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 方法计算两个最小的广义特征值和特征向量:
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 方法可用于实对称或者复赫米特机器精度矩阵. 该方法对于在给定区间内寻找特征值最有用.
| "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}}]; λlNorm[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].n用 NormalMatrixQ 进行验证:
NormalMatrixQ[n]{λ, v} = Eigensystem[n](d = DiagonalMatrix[λ])//MatrixFormu = 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[λ]计算一个由 1 和 0 组成的随机 4×4 矩阵不可对角化的概率:
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)
求解常微分方程 (ODE) 方程组
,
,
. 首先,构造右侧的系数矩阵
:
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]).v使用 DSolveValue 验证该解:
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]}]{vals, vecs} = Eigensystem[N[lj /. eqp[[3]]]]一个从点 pt 沿方向 dir 进行微小扰动后逆向积分的函数:
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]//Simplifym = {{1, 2}, {3, 2}};
a = {{1, 1}, {1, 1}};
Eigensystem[{m, a}]m.{-1, 1}a.{-1, 1}当且仅当 DiagonalizableMatrixQ[m] 为 True 时矩阵 m 有一组完整的特征向量:
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}//FullSimplifym = {{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]//Simplifyu = {{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,且特征向量列表将用零填充:
a = {{1, 1, 1}, {1, 1, 1}, {1, 1, 1}};b = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};NullSpace[a]
的两个广义特征值是 Indeterminate 并产生零向量:
Eigensystem[{a, a}]NullSpace[b]MatrixRank[Join[NullSpace[a], NullSpace[b]]]因此,
的一个广义特征值为 Indeterminate 并产生一个零向量:
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]; valss = 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]设置一个特征值为 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.}}];
vals将区间扩大至
,FEAST 即可找到特征值 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 语言. 1988. "Eigensystem." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2024. https://reference.wolfram.com/language/ref/Eigensystem.html.
APA
Wolfram 语言. (1988). Eigensystem. Wolfram 语言与系统参考资料中心. 追溯自 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: 10-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: 10-September-2026]}