matlab - 在 Matlab 中转置三角矩阵的列向量?

标签 matlab matrix vector triangular

如果我有一个向量

A = [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]

有没有办法把它转换成矩阵

[0   2   5   9   14 
 1   4   8   13  0
 3   7   12  0   0
 6   11  0   0   0
 10  0   0   0   0 ]

对于长度为 2016 的向量 A。

到目前为止:

n = 63;
B = triu(true(n));
C = zeros(n);
C(B) = A;

看起来在正确的线上。

然后尝试创建向量 D,其中每一列都是矩阵 C 的对角线...

D = zeros(n);

for i = 1:n;
    D(:,i) = diag(C,i-1);
end

但是在第二次迭代中,对角线的长度没有填满整个列(如预期和期望的那样),我得到了尺寸不匹配错误。

最佳答案

假设 A 的长度是一个三角数,因此 A 可以放入包括对角线在内的半个方阵中:

N = (sqrt(numel(A)*8+1)-1)/2;
t = hankel(1:N);
t(t==0) = inf;
[~, ind]= sort(t(:));
ind = ind(1:numel(A));
result = zeros(N);
result(ind) = A;

关于matlab - 在 Matlab 中转置三角矩阵的列向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46100919/

相关文章:

c++ - GLM 矩阵中的旋转方向,使用四元数

c++ - 使用 vector 而不是数组

c++ - 移动构造函数再次被调用 C++

matlab - 如何在 MATLAB 中根据 fileID 查找文件位置

MATLAB:与强度梯度联合直方图相关的熵

arrays - 如何在 MATLAB 中合并结构体/结构体数组?

c++ - 如何优化矩阵乘法运算

matlab - 如何在 MATLAB 模态中制作等待栏

r - 查找矩阵中重复次数最多的行

c++ - 无法保存结构内容