代码之家  ›  专栏  ›  技术社区  ›  Shalom Craimer

如何在MATLAB中创建基于向量的三角矩阵?

  •  11
  • Shalom Craimer  · 技术社区  · 15 年前

    假设我有一个像这样的向量:

    A = [101:105]
    

    这实际上是:

    [ 101, 102, 103, 104, 105 ]
    

    我只想使用向量/矩阵函数和运算符来生成矩阵:

    101 102 103 104 105
    102 103 104 105 0
    103 104 105 0   0
    104 105 0   0   0
    105 0   0   0   0
    

    101 102 103 104 105
    0   101 102 103 104
    0   0   101 102 103
    0   0   0   101 102
    0   0   0   0   101
    

    有什么想法吗?

    4 回复  |  直到 15 年前
        1
  •  26
  •   Nathan Fellman    15 年前

    hankel(A) 会给你第一个矩阵

    triu(toeplitz(A))

    --罗兰

        2
  •  3
  •   Community George Stocker    7 年前

    Loren . 也可以使用创建这些矩阵 SPDIAGS :

    vec = 101:105;
    A = full(spdiags(repmat(vec,5,1),0:4,5,5));  % The second matrix
    B = fliplr(full(spdiags(repmat(fliplr(vec),5,1),0:4,5,5)));  % The first matrix
    

    我记得在我发现Loren提到的一些内置函数之前,我创建了这样的带状矩阵。它不像使用这些工具那么简单和干净,但它确实有效

        3
  •  2
  •   Nathan Fellman    15 年前

    A

    101 102 103 104 105
    101 102 103 104 105
    101 102 103 104 105
    101 102 103 104 105
    101 102 103 104 105
    

    B 这样当你乘 A*B 你会得到你想要的结果。基本上先在纸上做线性代数,然后用Matlab做计算。

        4
  •  2
  •   Baz    12 年前

    m=toeplitz([1,0,0,0],[1,2,3,4])
    

    对于另一种情况,使用 rot90(m)