zoukankan      html  css  js  c++  java
  • 零化多项式/特征多项式/最小多项式/常系数线性齐次递推

    零化多项式/特征多项式/最小多项式/常系数线性齐次递推

    约定:

    (I_n)(n)阶单位矩阵,即主对角线是(1)(n)阶矩阵

    一个矩阵(A)(|A|)(A)的行列式

    默认(A)是一个(n imes n)的矩阵


    定义

    零化多项式:

    对于一个矩阵(A),它的一个零化多项式(f(lambda))是满足(f(A)=0)的多项式,定义域包含矩阵

    [ ]

    最小多项式:次数最低的零化多项式

    特征多项式

    对于一个(n)阶的矩阵(A),它的特征多项式

    (p(lambda)=|lambda I_n-A|)

    (lambda)定义域不止是(R),还可以是矩阵

    (p(lambda))是关于(lambda)的一个不超过(n+1)次的多项式

    (p(lambda )=sum_0^{n}a_ix^i)


    Cayley-Hamilton定理:矩阵的特征多项式也是它的零化多项式


    求解特征多项式

    带入(n)个数,求出得(|x I_n-A|),得到(n)个矩阵,通过高斯消元可以(O(n^3))地求出行列式

    然后可(O(n^2))拉格朗日插值求出原来的多项式,总复杂度受限于高斯消元,为(O(n^4))

    求解最小多项式

    构造矩阵序列(a_i=A^i)

    求出它的一个线性递推(r_i),即

    (egin{aligned} sum_{j=0}^{m} r_j a_{i-j}=sum_{j=0}^{m} r_j A^{i-j}=(sum_{j=0}^m r_{m-j}A^j)cdot A^{i-m}=0end{aligned})

    (egin{aligned} herefore sum_{j=0}^m r_{m-j}A^j=0end{aligned})

    所以可以由(r_i)翻转得到(f(lambda))

    求解(a_i)(n)项的复杂度受限于矩阵乘法为(O(n^4)),求解递推式的复杂度为(O(n^3))

    考虑到实际求解递推式时,随机生成了两个向量(u,v)

    实际是计算标量序列({uA^iv})的递推式,所以实际每次求出(uA^i)复杂度应为(O(n^2))

    求这个递推式需要用到(a_i)(2n)项,求解复杂度为(O(n^3))

    因此总复杂度为(O(n^3))

    (但是如果只是求出来并没有什么用,因为求解方法是随机的,甚至连检查一次保证正确都需要(O(n^2(n+e)))的时间((e)为矩阵非0位置个数))

    [ ]

    求解稀疏方程组

    设方程系数用矩阵(A)表示,右侧每个方程的常数用向量(b)表示,答案用向量(x)表示,则满足关系式

    (Ax=b),即(x=A^{-1}b)

    求出({A^ib})线性递推式,反推出(A^{-1}b)即可

    反推方法:

    带入线性递推的(m)项,则(sum_{i=0}^{m} A^{m-i}bcdot r_i=0)

    两边同乘(A^{-1}),得到(A^{-1}bcdot r_m +sum_{i=0}^{m-1}A^{m-i}br_i=0)

    [ ]


    求解矩阵(k)次幂

    我们要求解(A^k),常规做法是直接用快速幂

    设矩阵(A)的一个零化多项式是(f(lambda))

    显然,(A^k)可以用一个多项式表示(A^k=sum_0^k w_i A^i)

    ({w_i})构成了一个(k+1)次多项式(F_k(x))

    存在一种合法的表示是(F_k(x)=x^k)

    (ecause f(A)=0 herefore forall i, f(A)A^i=0)

    也就是相当于我们要求出(x^k)对于(f(x))这个(n+1)多项式取模

    显然可以通过类似快速幂的方式倍增求解这个多项式,每次对(f(x))取模复杂度是(O(nlog n))

    就能在(O(nlog mlog n))时间得求出(F(x))

    最后得到的(F(x))是一个(n)次多项式

    那么带入就可以快速求出(A_k)

    可以认为这个复杂度是受限于求解(A^0,A^1,cdots,A^{n-1})(O(n^4))

    对于元矩阵(A)稀疏矩阵的情况,设其包含(e)个非零位置

    那么求解(Bcdot A)的过程是(O(ncdot e))的,求解(A_0,A^1,cdots,A^{n-1})的过程,是(O(n^2e))

    求解零化多项式的复杂度也是(O(n^2(n+e)))的,因此总复杂度为(O(n^2(n+e)))

    而一般的矩阵快速幂是(O(n^3log k))的,这种方法适用情况非常特殊

    另外,对于并不需要知道整个矩阵的答案,并且(A^0,A^1,cdots,A^{n-1})特殊的具体问题,这个方法也十分有效

    [ ]


    求解常系数线性齐次递推

    问题是要求数列(f_i=sum _{j=1}^{n}a_jcdot f_{i-j})

    给出(f_0,f_1,cdots,f_{n-1}),求第(k)项的值

    线性递推显然可以用 初始向量列转移矩阵的幂次 的乘积表示,即(f_i=(S cdot A^i)_n),其中(A)为转移矩阵,(S)为初始向量列,我们求的是第(n)

    对于(n=4)的情况,我们的转移矩阵(A)

    1 2 3 4
    1 (a_4)
    2 1 (a_3)
    3 1 (a_2)
    4 1 (a_1)

    鉴于它的特殊性,我们可以直接求出它的特征多项式表达式

    (lambda I_n-A=)

    1 2 3 4
    1 (lambda) (-a_4)
    2 $-1 $ (lambda) (-a_3)
    3 (-1) (lambda) (-a_2)
    4 (-1) (lambda -a_1)

    带入行列式最暴力的求法

    枚举一个排列(p_i),设排列(p)的逆序对为(f(p))(|A|=sum (-1)^{f(p)} Pi A_{i,p_i})

    实际上合法的排列只有(n)个,就是

    枚举(p_i=n)

    那么(p_j=left{egin{aligned} j && j<i \ n && j=i \ j-1 && j> iend{aligned} ight.)

    (i=n)时,((-1)^{f(p)} Pi A_{i,p_i}=lambda ^n-a_1lambda ^{n-1})

    (i>1)时,

    (f(p)=n-i)

    (Pi A_{i,p_i}=(-1)^{n-i+1}lambda^icdot a_{n-i+1})

    ((-1)^{f(p)} Pi A_{i,p_i}=-lambda^i a_{n-i+1})

    综上,转移矩阵(A)的特征多项式有简单的表达

    (p(lambda) = |lambda I_n-A|=lambda^n-a_1lambda^{n-1} -a_2lambda^{n-2} -cdots -a^n)

    假设有(f_0)这一项(不需要知道是多少),那么认为初始向量列为(S=(f_{-(n-1)},f_{-(n-2)},cdots ,f_{0}))

    这个问题,我们要求的是(Scdot A^k)的第(n)项,不需要知道整个矩阵

    类似求出(A^k)的过程,求出(F_k(x)mod p(lambda))

    我们要求解((Scdot A^k)_n=sum_1^{n}[x^i]{F(x)}(Scdot A^i)_n)

    ((Scdot A^i)_n=f_i)已知,求出(F(x))后直接带入即可

    需要用到多项式取模,求解这个表达式是(O(nlog nlog k))的,求完直接带入即可

    用最朴素的( ext{NTT}),完全不卡常,甚至过不掉模板题

  • 相关阅读:
    Java面试题集(七)--Spring常见面试问题【重要】
    Java面试题集(六)
    qt4.8.4安装以及64位程序编译方法
    页面跳转动画设置方法
    Lua环境配置 windows + VS
    Oracle触发器(trigger):view,schema,database
    java课程设计(计算器)
    数据结构 练习 19-活动选择问题的实现(动态规划 和 贪心)
    网页在Safari快速滚动和回弹的原理: -webkit-overflow-scrolling : touch;的实现
    如何打开Nib文件
  • 原文地址:https://www.cnblogs.com/chasedeath/p/12949896.html
Copyright © 2011-2022 走看看