线性代数——特征系统

定义

An阶方阵,如果存在数λn非零列向量x满足

Ax=λx

λ为此方阵的特征值 x为此方阵的特征向量

(λIA)·x=0

由于x不为0 所以|λIA|=0

证明:

考虑Mx=0|M|=0(x0)

显然x=0是一个解,满秩对应唯一解,因为此时x是非0解,所以不止一个解,代表M不是满秩,即|M|=0

f(λ)=|λIA| 这是一个关于 λn 次多项式(考虑行列式定义 会经过主对角线0~n次不等)称其为特征多项式 f(λ)=0 也就是它的特征方程 ( n次方程)

根据定义,特征方程的n个根就是原方阵的n个特征值

定理

Cayley-Hamilton定理

考虑特征多项式P(x)=xn+b1xn1+...+bnP(A)=An+b1An1+...+bn=0

证明:考虑|λIA|=0 P(λ)=0P(λI)=0P(A)=0

(因为特征值带入进去是特征方程的根所以P(λ)=0

举例

常系数线性递推

考虑转移矩阵

C=[b1b2bk100010]

按定义代入可解得多项式

f(λ)=|λIC|=[λb1b2bk1λ001λ]

考虑从最后一行展开fk(λ)=λfk1(λ)bk

(考虑最后一列选择什么 如果选择λ则可以按照定义接着选下去,若是选择(bk)的话会有(1)k1(1)k1的贡献(前面是强制选的 后面是产生了k1逆序对)

又因为f1(λ)=λb1 于是有 fk(λ)=λkb1λk1bk

我们用快速幂求递推式的时候瓶颈在于求 Cn 接下来考虑如何快速求这个玩意

根据Hamilton-Cayley定理(上面那个)有f(C)=Ckb1Ck1b2Ck2...bkI=0

因此 求Cn就快了 因为有f(C)=0 所以我们考虑让Cnf(C)取模(这里指多项式取模)

这样 我们就只需要知道I,C,...,Ck1就可以了

但实际上 我们真的需要知道吗?

考虑我们求的an 只是列向量的第一项 把整个柿子写出来

Cnv0=c0v0+...+ck1Ck1v0

v0是我们的初始序列 由定义可以得到v0的第一项是a0Ck1v0的第一项是ak1

(前提是这是前k项也满足这个递推关系 不然就需要预处理出前2k项)

所以预处理前k项就可以快速求了

现在就分为了两个子问题 1.求系数ci 2.快速求前k项

  1. 其实就是xn mod f(x)

    类似自然数快速幂,用NTT优化多项式取模就可以做到O(k logk logn)

  2. 快速求k/2k

    如果没有给出前k项的话 考虑利用生成函数 原数列是G 转移序列是A 可以得到G=GA+r (r是常数项)

    移项得到G=r1A 在模xk+1意义下做

    如果要求2k项的话是没有快速做法的 至少可以分治NTT做到O(klg2k)(至少我没找到 如果找到了的话请戳我/kel 超级感谢)

More Advanced——矩阵对角化

利用了HC定理 我们在已知特征多项式的前提下能快速求特殊矩阵高次幂了 那么我们是否能做到求任意的矩阵高次幂了呢?矩阵对角化就可以让我们来快速计算高次幂

Prob0.对角矩阵diag(a1,a2,,ak)n次幂

考虑diag(a1,a2,,ak)n=diag(a1n,a2n,,akn)

所以这玩意超级好求

那么肯定不是所有矩阵都能做到快速求对角矩阵(暴力是O(k3)) 我们考虑怎么办

前缀知识——桥函数

先讲个简单的玩意,函数迭代。

考虑f(x)=3x+4 快速求f(n)(x)

考虑构造桥函数ϕ(x)=x2ϕ1(x)=x2f(x)=3(x+2)2g(x)=3xf(x)=ϕ(g(ϕ1(x)))=ϕgϕ1(x)

是函数复合 有结合律 无交换律【应该显然】)

于是f(2)=ff=ϕ1gϕϕ1gϕ1=ϕ1g(2)ϕ1类似可以推出

f(n)=ϕ1g(n)ϕ1 对于g可以快速计算 此时ϕ函数起到的桥接作用 我们称gf相似

既然函数可以这么做到 我们考虑矩阵能否这么做

类似的有记矩阵A与矩阵B相似为ABABΦ桥接的话 则有An=Φ1BnΦ

定理

n阶方阵可对角化的充要条件时An个线性无关的特征向量

结论

Φ=[v1 v2  vn]

(vi是第i个线性无关的列特征向量)

证明

AΦ=A[v1  vn]=[Av1Avn]=[λ1v1λnvn]=Φdiag(λ1,,λn)

λi是对应vi的特征值 原因见全文第一句话)

于是有整个柿子=diag(λ1,,λn)

你以为你学会了对角化你就能算所有高次幂辣?你还是naı¨ve

事实上对于大部分矩阵你根本求不出来特征值和特征向量!

如果需要例题的话可以看CF947E 综合了线代特征系统的一道好题 具体的我懒得写了 可以戳sundz的博客

posted @   寒雨微凝  阅读(1096)  评论(3编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示