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
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]
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
3 个评论
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
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)
更多回答(1 个)
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);
1 个评论
Jan
2023-3-1
Why do you set the diagonal elements randomly and repeatedly in each iteration of the inner loop?
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Operating on Diagonal Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!