【问题标题】:Companion matrix complexity伴随矩阵复杂度
【发布时间】:2009-04-26 20:27:02
【问题描述】:

我知道这更像是一个复杂性理论问题而不是一个编程问题,希望我在这里没有做错事情,如果是错误的地方,我很抱歉,但我希望你们中的某个人有答案。它甚至在某种程度上与编程相关,因为它是一个复杂性理论问题。

我正在研究线性循环序列,我读到为了获得它弹出的序列的第 n 个值,你需要获得一些伴随矩阵的幂,我想知道是否有已知的算法快速获得这种矩阵的幂..

我无法给出编码示例,但我会尽力为您提供更多解释:

k阶齐次线性循环序列:
s(n+k)=a(k-1)s(n+k-1)+a(k-2)s(n+k-2)+...+a(0)
对于 n=0,1,.. 其中 s(i) 是序列的第 i 个值,a(i) 是代数域中的系数。

A 是上述序列的伴随矩阵,如果它是:
( 0 0 0 0 ... 0 a(0) )
( 1 0 0 0 ... 0 a(1) )
( 0 1 0 0 ... 0 a(2) )
( .. .. .. .. .. .. .. .. .. ..)
( 0 0 0 0 ... 1 a(k-1) )
此外,理论指出,对于序列的状态向量,我们有:
s(n) = s(0)A^n for n=0,1,..
就是这样,谢谢你的帮助。

【问题讨论】:

    标签: matrix complexity-theory


    【解决方案1】:

    快速求出矩阵幂的常用策略是将其对角化(执行特征向量分解):

    A = P-1 D P

    其中 D 是对角矩阵。然后,您可以通过计算将 A 提高到 n 次方

    An = P-1 Dn P

    其中 Dn 计算速度很快,因为它是一个对角矩阵,因此您只需分别计算每个元素的幂即可。

    但是,并非所有矩阵都是可对角化的——我不知道您的伴生矩阵是否可以对角化。在任何情况下,您都可能会发现 this Wikipedia article 很有帮助。

    【讨论】:

    • 它并不总是可对角化的,只有当特征多项式的根不同时,无论如何,这很好,但我想知道是否有某种方法可以利用矩阵的结构,ty跨度>
    【解决方案2】:

    您可以使用O(log n) 矩阵乘积计算矩阵M 的nth 次方:

    • 如果n=0,返回I
    • 如果n是偶数,计算N=Mn/2并返回N*N
    • 如果n是奇数,计算N=Mn-1并返回M*N

    【讨论】:

    • 很抱歉,我不知道如何在 O(log n) 中实现,我认为每个矩阵乘法仍然是 O(n^2),其中 n 是数字行数(假设是方阵),不是吗?
    • 哦,好吧,没读好:D 它是 O(log n) * 矩阵乘积的成本,所以它是 O(n^2 log n),对吧?谢谢,但我认为这不是我需要的,我想知道特殊类型矩阵的一种利用...
    • 不完全是。矩阵乘积(被认为)比这更难,但是矩阵的大小,比如 m×m,与指数 n 完全无关,因此使用 Strassen 算法或 O( m^3 log n) 与朴素算法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 2021-04-18
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多