Vector to lower-triangular matrix

Hello.
Im trying to estimate multivariate normal distribution. Correlation matrix is one of the parameters, and I need to have all parameters in a vector for fmincon.
I can vectorize a lower-triangular of correlation matrix, indeed, but how do I do an opposite?
I mean, I have a matrix C - a correlation matrix:
1 c12 c13
C = c12 1 c23
c13 c23 1
Then I do:
a = tril(C,-1);
a = a(:);
b = a(a(:)>0);
b = [c12; c13; c23];
I get b - a vectorized lower-triangular matrix. How can I do an opposite (for matrices of any dimensions)? To get a lower-triangular matrix from a vector? Thanks!

回答(1 个)

b=rand(1,10)
b = 1×10
0.5909 0.3646 0.0131 0.7843 0.1867 0.2957 0.2750 0.2019 0.1148 0.6168
n=roots([1,1,-2*numel(b)]);
n=n(n>0)+1;
validateattributes(n,{'numeric'},{'positive', 'integer'}) %numel(b) must be a pyramidal number
C=tril(ones(n),-1);
C(logical(C))=b;
C=C+C.'+eye(n)
C = 5×5
1.0000 0.5909 0.3646 0.0131 0.7843 0.5909 1.0000 0.1867 0.2957 0.2750 0.3646 0.1867 1.0000 0.2019 0.1148 0.0131 0.2957 0.2019 1.0000 0.6168 0.7843 0.2750 0.1148 0.6168 1.0000

类别

帮助中心File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

产品

标签

提问:

2013-3-5

编辑:

2021-6-29

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by