How to create a symmetric random matrix?

조회 수: 142 (최근 30일)
Muhammad Shafique
Muhammad Shafique 2014년 3월 29일
댓글: Alaa 2023년 9월 3일
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
Roger Stafford
Roger Stafford 2014년 3월 30일
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.
Muhammad Shafique
Muhammad Shafique 2014년 3월 30일
편집: Muhammad Shafique 2014년 3월 30일
Roger, thanks for the question. I meant to say that the values on the row and column must be between 0 and the value on the diagonal. For instance, a random value is chosen within the given range for any element on the diagonal and this value becomes the upper bound of the range for random number generation for the corresponding row/column. This also means that any value in the triangle must not be larger than any of the values on the diagonal that are incident to it.

댓글을 달려면 로그인하십시오.

채택된 답변

Roger Stafford
Roger Stafford 2014년 3월 30일
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
Youssef  Khmou
Youssef Khmou 2014년 3월 30일
efficient proposition.
Alaa
Alaa 2023년 9월 3일
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)

댓글을 달려면 로그인하십시오.

추가 답변 (4개)

Brian Crafton
Brian Crafton 2018년 12월 3일
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
Irfan Ahmed
Irfan Ahmed 2020년 4월 11일
I think this should not be element-wise multiplication, instead, it should be A*A'
Antong Cheng
Antong Cheng 2022년 5월 3일
The problem is that this only generates positive semi-definite matrices, so it's unfit for certain scenarios.

댓글을 달려면 로그인하십시오.


mike will
mike will 2019년 3월 22일
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
John D'Errico
John D'Errico 2019년 3월 22일
To be pedantic, Mike has shown ONE solution. Not THE solution. It has different numerical properties from the other solutions shown.

댓글을 달려면 로그인하십시오.


Walter Roberson
Walter Roberson 2014년 3월 29일
When the matrix A is square, (A + A')/2 is symmetric (and positive definite)
  댓글 수: 1
John D'Errico
John D'Errico 2019년 3월 22일
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
Youssef Khmou 2014년 3월 30일
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
Muhammad Shafique
Muhammad Shafique 2014년 3월 30일
Youssef, thank you very much for taking the time to help. I'm wondering whether it is possible to get the output in whole numbers.
Ali Waqas
Ali Waqas 2022년 11월 10일
편집: Ali Waqas 2022년 11월 10일
floor(M*100) to get whole numbers

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by