构造下三角矩阵

时间:2018-02-12 22:20:37

标签: matlab matrix vectorization sparse-matrix

我正在尝试构建一个特定形式的下三角矩阵,截至目前,我正在使用以下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的定义,因为它们与矩阵的构造无关。

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

1 个答案:

答案 0 :(得分:2)

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

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

这将是一个full矩阵,因此如果您需要该格式,则必须将其转换为sparse(尽管它可能不会为您节省任何内存,因为您的矩阵将半满)。