matlab - 如何在 Matlab 中沿对角线重复一个向量

标签 matlab matrix vector diagonal

我想在对角线 m 上重复长度 n 的向量 A 次以获得 (n+m -1) x m 矩阵 B。例如,A = [a;b;c;d]m = 4。这应该导致

B = 
[a 0 0 0;
 b a 0 0;
 c b a 0;
 d c b a;
 0 d c b;
 0 0 d c;
 0 0 0 d]

有什么快速实现这一目标的建议吗? blkdiag(repmat(A,1,m)) 在这种情况下对我没有帮助,因为它创建了一个 (n*m) x m 矩阵。

最后我实际上只对第三个矩阵 CB 的矩阵乘积 D 感兴趣:

D=C*B

如果您看到另一个无需生成 B 即可获得 D 的选项,我将不胜感激。但是解决上述问题也会让我很高兴!顺便说一下,nm 会很大。

谢谢!

最佳答案

因为@mathematician1975 懒得写出正确的答案。

Matlab 有一个函数,叫做 toeplitz

你可以这样调用它:

c=[1;2;3;4;0;0;0];
r=[0, 0, 0, 0];
toeplitz(c,r)

ans =

   1   0   0   0
   2   1   0   0
   3   2   1   0
   4   3   2   1
   0   4   3   2
   0   0   4   3
   0   0   0   4

您可以使用零来按照您想要的方式塑造矩阵。

关于matlab - 如何在 Matlab 中沿对角线重复一个向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20959040/

相关文章:

string - 在 Matlab 中查找字符串中的特定字符

python - 在带有标记的列和行的 python 字典中创建矩阵

c - 在c中为矩阵分配内存的问题

检查有效数独的c程序

c++ - 需要改变的东西

java - 如何在两个字符串之间或单个字符串内显示 vector/图像

java - vector 中的问题

string - 拆分由给定对象类型分隔的字符串

matlab - 如何将 DISP 的结果作为返回参数传递给变量?

python - Sphinx matlab文档错误: missing module 'std'