定义
设A是n阶方阵,如果存在数λ和n阶非零列向量x满足
Ax=λx
称λ为此方阵的特征值 x为此方阵的特征向量
(λI−A)⋅x=0
由于x不为0 所以|λI−A|=0
证明:
考虑Mx=0⇔|M|=0(x≠0)
显然x=0是一个解,满秩对应唯一解,因为此时x是非0解,所以不止一个解,代表M不是满秩,即|M|=0
记 f(λ)=|λI−A| 这是一个关于 λ 的 n 次多项式(考虑行列式定义 会经过主对角线0~n次不等)称其为特征多项式 f(λ)=0 也就是它的特征方程 ( n次方程)
根据定义,特征方程的n个根就是原方阵的n个特征值
定理
Cayley-Hamilton定理
考虑特征多项式P(x)=xn+b1xn−1+...+bn 有P(A)=An+b1An−1+...+bn=0
证明:考虑|λI−A|=0 P(λ)=0→P(λI)=0→P(A)=0
(因为特征值带入进去是特征方程的根所以P(λ)=0)
举例
常系数线性递推
考虑转移矩阵
C=⎡⎢
⎢
⎢
⎢
⎢⎣b1b2…bk10…0⋮⋱⋮0…10⎤⎥
⎥
⎥
⎥
⎥⎦
按定义代入可解得多项式
f(λ)=|λI−C|=⎡⎢
⎢
⎢
⎢
⎢⎣λ−b1−b2…−bk−1λ…0⋮⋱⋮0…−1λ⎤⎥
⎥
⎥
⎥
⎥⎦
考虑从最后一行展开fk(λ)=λfk−1(λ)−bk
(考虑最后一列选择什么 如果选择λ则可以按照定义接着选下去,若是选择(−bk)的话会有(−1)k−1(−1)k−1的贡献(前面是强制选的 后面是产生了k−1逆序对)
又因为f1(λ)=λ−b1 于是有 fk(λ)=λk−b1λk−1−⋯−bk
我们用快速幂求递推式的时候瓶颈在于求 Cn 接下来考虑如何快速求这个玩意
根据Hamilton-Cayley定理(上面那个)有f(C)=Ck−b1Ck−1−b2Ck−2−...−bkI=0
因此 求Cn就快了 因为有f(C)=0 所以我们考虑让Cn对f(C)取模(这里指多项式取模)
这样 我们就只需要知道I,C,...,Ck−1就可以了
但实际上 我们真的需要知道吗?
考虑我们求的an 只是列向量的第一项 把整个柿子写出来
Cn⋅v0=c0⋅v0+...+ck−1⋅Ck−1⋅v0
v0是我们的初始序列 由定义可以得到v0的第一项是a0,Ck−1v0的第一项是ak−1
(前提是这是前k项也满足这个递推关系 不然就需要预处理出前2k项)
所以预处理前k项就可以快速求了
现在就分为了两个子问题 1.求系数ci 2.快速求前k项
-
其实就是xn mod f(x)
类似自然数快速幂,用NTT优化多项式取模就可以做到O(k logk logn)
-
快速求k/2k项
如果没有给出前k项的话 考虑利用生成函数 原数列是G 转移序列是A 可以得到G=GA+r (r是常数项)
移项得到G=r1−A 在模xk+1意义下做
如果要求2k项的话是没有快速做法的 至少可以分治NTT做到O(klg2k)(至少我没找到 如果找到了的话请戳我/kel 超级感谢)
More Advanced——矩阵对角化
利用了HC定理 我们在已知特征多项式的前提下能快速求特殊矩阵高次幂了 那么我们是否能做到求任意的矩阵高次幂了呢?矩阵对角化就可以让我们来快速计算高次幂
Prob0.对角矩阵diag(a1,a2,…,ak)的n次幂
考虑diag(a1,a2,…,ak)n=diag(an1,an2,…,ank)
所以这玩意超级好求
那么肯定不是所有矩阵都能做到快速求对角矩阵(暴力是O(k3)) 我们考虑怎么办
前缀知识——桥函数
先讲个简单的玩意,函数迭代。
考虑f(x)=3x+4 快速求f(n)(x)
考虑构造桥函数ϕ(x)=x−2 有ϕ−1(x)=x−2 且f(x)=3(x+2)−2 记g(x)=3x 有f(x)=ϕ(g(ϕ−1(x)))=ϕ∘g∘ϕ−1(x)
(∘是函数复合 有结合律 无交换律【应该显然】)
于是f(2)=f∘f=ϕ−1∘g∘ϕ∘ϕ−1∘g∘ϕ−1=ϕ−1∘g(2)∘ϕ−1类似可以推出
f(n)=ϕ−1∘g(n)∘ϕ−1 对于g可以快速计算 此时ϕ函数起到的桥接作用 我们称g和f相似
既然函数可以这么做到 我们考虑矩阵能否这么做
类似的有记矩阵A与矩阵B相似为A∼B 若A∼B用Φ桥接的话 则有An=Φ−1⋅Bn⋅Φ
定理
n阶方阵可对角化的充要条件时A有n个线性无关的特征向量
结论
Φ=[v1 v2 ⋯ vn]
(vi是第i个线性无关的列特征向量)
证明
A⋅Φ=A⋅[v1 ⋯ vn]=[Av1⋯Avn]=[λ1⋅v1⋯λn⋅vn]=Φ⋅diag(λ1,⋯,λn)
(λi是对应vi的特征值 原因见全文第一句话)
于是有整个柿子=diag(λ1,⋯,λn)
你以为你学会了对角化你就能算所有高次幂辣?你还是na¨ıve了
事实上对于大部分矩阵你根本求不出来特征值和特征向量!
如果需要例题的话可以看CF947E 综合了线代特征系统的一道好题 具体的我懒得写了 可以戳sundz的博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端