i have a vector
a=[1,2,3,4,5,6];
i want to convert it to matrix such that the diagonals are all 0 and the rest of the elements are:
M=[0 1 2 3;1 0 4 5;2 4 0 6;3 5 6 0];
0 1 2 3
1 0 4 5
2 4 0 6
3 5 6 0

 Akzeptierte Antwort

Stephen23
Stephen23 am 3 Jul. 2018
Bearbeitet: Stephen23 am 3 Jul. 2018

0 Stimmen

>> a = [1,2,3,4,5,6];
>> M = tril(ones(4),-1);
>> M(M>0) = a;
>> M = M+M.'
M =
0 1 2 3
1 0 4 5
2 4 0 6
3 5 6 0
And if you want to automatically adjust the size you can basically invert the binomial coefficient:
>> N = (sqrt(1+numel(a)*8)-1)/2;
>> M = tril(ones(N+1),-1);

1 Kommentar

Rik
Rik am 3 Jul. 2018
If you need to automatically find the correct size:
a = [1,2,3,4,5,6];
M = tril(ones(.5+0.5*sqrt(8*numel(a)+1)),-1);
M(M>0) = a;
M = M+M.';
>> a = 1:3;
>> M = tril(ones(.5+0.5*sqrt(8*numel(a)+1)),-1);
>> M(M>0) = a;
>> M = M+M.'
M =
0 1 2
1 0 3
2 3 0

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu MATLAB finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by