How to create a symmetric random matrix?
102 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Muhammad Shafique
el 29 de Mzo. de 2014
Comentada: Alaa
el 3 de Sept. de 2023
Hello,
I need to create a random matrix meeting the following conditions:
- The values on the main diagonal are between a given range (e.g., 0 to 1000000)
- Each value on the diagonal is randomly distributed/spread in its corresponding row and column vectors.
- The matrix is symmetric (that is to say, corresponding values in upper and lower triangles are the same)
Any help will be highly appreciated.
Best,
M
2 comentarios
Roger Stafford
el 30 de Mzo. de 2014
Muhammad, could you please expound at greater length on that second condition: "randomly distributed/spread in its corresponding row and column vectors"? What exactly does that mean? Is that a condition on the sum of the elements in the corresponding row and column, and if so, just what is the condition? What does "randomly distributed/spread" mean in this context? Perhaps a short example of what you have in mind would help.
Respuesta aceptada
Roger Stafford
el 30 de Mzo. de 2014
Let the random matrix to be generated be called M and its size be NxN.
d = 1000000*rand(N,1); % The diagonal values
t = triu(bsxfun(@min,d,d.').*rand(N),1); % The upper trianglar random values
M = diag(d)+t+t.'; % Put them together in a symmetric matrix
If you want whole numbers, apply the 'floor' function to 'd' and then after computing 't', apply it to 't'.
3 comentarios
Alaa
el 3 de Sept. de 2023
What if the matrix has definite numbers? (i,e., numbers are not randomly generated)
How can one develop a symmetric matrix (given that the diagonals will be zeros)
Más respuestas (4)
Brian Crafton
el 3 de Dic. de 2018
Just came up with this gem and wanted to share it :
A = rand(4)
A .* A'
This will generate a random 4x4 matrix and its clear why.
2 comentarios
Irfan Ahmed
el 11 de Abr. de 2020
I think this should not be element-wise multiplication, instead, it should be A*A'
Antong Cheng
el 3 de Mayo de 2022
The problem is that this only generates positive semi-definite matrices, so it's unfit for certain scenarios.
mike will
el 22 de Mzo. de 2019
This is the solution:
A = rand(4, 4)
A_symmetric = tril(A) + triu(A', 1)
Where A will be a square matrix, and
tril(A)
returns lower triangular part of matrix A, and
triu(A', 1)
returns upper triangular part of matrix transpose(A).
1 comentario
John D'Errico
el 22 de Mzo. de 2019
To be pedantic, Mike has shown ONE solution. Not THE solution. It has different numerical properties from the other solutions shown.
Walter Roberson
el 29 de Mzo. de 2014
When the matrix A is square, (A + A')/2 is symmetric (and positive definite)
1 comentario
John D'Errico
el 22 de Mzo. de 2019
Actually, the statement shown here is incorrect. Given a square matrix A, (A+A')/2, MAY be positive definiite. But there is no such requirement. For example:
A = randn(4);
As = (A + A')/2;
eig(As)
ans =
-1.9167
-1.6044
-0.37354
2.1428
As is symmetric always. But there is no requirement that it is SPD. As you see, it had 3 negative eigenvalues in this simple example.
Even if rand had been used to generate the matrix, instead of randn, there would still be no assurance the result is positive definite. A counter-example for that took me only one try too.
A = rand(4);
eig((A + A')/2)
ans =
-0.32868
0.088791
0.32729
1.9184
The symmetric computation shown will insure only that the eigenvalues are real. Positive definite requires positivity of the eigenvalues.
Youssef Khmou
el 30 de Mzo. de 2014
the random matrix is generated using the following :
N=500;
M=rand(N);
M=0.5*(M+M');
L=100; % magnitude
for n=1:N
M(n,n)=L*rand;
end
2 comentarios
Ver también
Categorías
Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!