how to make symmetric matrix with vector of its non repeated elements?

4 次查看(过去 30 天)
suppose we have non repeated elements of a matrix in a vector . I need to make a symmetric matrix by using this vector in matlab.
for example if we have :
v= [ 1 4 5 6 9 0]
the answer must be the matrix:
1 4 5
4 6 9
5 9 0

采纳的回答

Jan
Jan 2023-3-1
编辑:Jan 2023-3-1
v = [1 4 5 6 9 0];
d = numel(v);
n = (sqrt(8 * d + 1) - 1) / 2; % Number of rows and colums
A = zeros(n, n);
A(tril(true(n, n))) = v;
A(triu(true(n, n))) = v % [EDITED, faster than transposing the mask]
A = 3×3
1 4 6 4 5 9 5 9 0
Or with a loop (assumably faster for large arrays):
k = 0;
A = zeros(n, n);
for i2 = 1:n
k = k + 1; % Diagonal element
A(i2, i2) = v(k);
for i1 = i2 + 1:n % Below and above diagonal
k = k + 1;
A(i1, i2) = v(k);
A(i2, i1) = v(k);
end
end
A
A = 3×3
1 4 5 4 6 9 5 9 0
  3 个评论
Isabelle Davies
Isabelle Davies 2025-6-1
Heads up: The first method does not return the correct symmetric matrix A, as the elements in row 2, column 2 and row 1, column 3 have been switched.
Stephen23
Stephen23 2025-6-1
编辑:Stephen23 2025-6-1
@Isabelle Davies: you are right.
It is because the order of the elements in v are not suitable for allocating into the upper triangle.
One solution:
v = [1,4,5,6,9,0];
n = (sqrt(8*numel(v)+1)-1)/2; % must be whole
A = zeros(n,n);
A(tril(~A)) = v;
A = A+triu(A.',1)
A = 3×3
1 4 5 4 6 9 5 9 0
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

请先登录,再进行评论。

更多回答(1 个)

Pratheek
Pratheek 2023-3-1
The first line of the code is to input for the size of the matrix that you want to generate.
% ask the user for the size of the matrix
n = input('Enter the size of the square matrix: ');
% get the input vector
v = [1 4 5 6 9 0]; % or prompt the user to enter the vector as well
% create the symmetric matrix
M = zeros(n);
k = 1;
for i = 1:n
for j = (i+1):n
M(i,j) = v(k);
M(j,i) = v(k);
M(i,i) = v(randi(length(v)));
k = k + 1;
end
end
% display the resulting matrix
disp(M);

类别

Help CenterFile Exchange 中查找有关 Operating on Diagonal Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by