【问题标题】:Constructing lower triangular matrix构造下三角矩阵
【发布时间】:2018-02-12 22:20:36
【问题描述】:

我正在尝试构造一个特定形式的下三角矩阵,截至目前,我正在使用以下 for 循环:

M = sparse(eye(DIM));
for k = 1 : DIM - 1
    ak = -z*(1-z)^(k-1);
    M = M + sparse(diag(ak * ones(1, DIM - k), -k));
end

基本上,从主对角线向下的每条对角线都是恒定的。我没有包括我对 DIM 和 z 的定义,因为它们与矩阵的构造无关。

有人知道更快的方法吗?也许是矢量化版本?

【问题讨论】:

  • 看起来像一个Toeplitz 矩阵,只是稀疏的。如果你的一半矩阵是满的,我不确定保持它稀疏是否有意义。
  • 啊,托普利茨矩阵!谢谢!这有帮助。关于稀疏性,我明白你的意思。 :)

标签: matlab matrix vectorization sparse-matrix


【解决方案1】:

As Andras mentioned in a comment,您可以使用toeplitz 帮助您生成此文件,而无需循环。您可以使用双输入形式(提供第一列和第一行的内容)来创建一个非对称矩阵,如下所示:

M = toeplitz([1 -z.*(1-z).^(0:DIM-2)], [1 zeros(1, DIM-1)]);

这将是一个full 矩阵,所以如果你需要它,你必须将它转换为sparse(尽管它可能不会为你节省任何内存,因为你的矩阵将是一半-满)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    相关资源
    最近更新 更多