我正在尝试构建一个特定形式的下三角矩阵,截至目前,我正在使用以下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的定义,因为它们与矩阵的构造无关。
有谁知道更快的方法吗?也许是矢量化版本?
答案 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(尽管它可能不会为您节省任何内存,因为您的矩阵将半满)。