Thread Subject: generate a positive semi-definite matrices??
Subject: generate a positive semi-definite matrices??
From: VijaKharaDate: 10 Feb, 2008 02:50:10 Message: 1 of 9 |
Hi all
I need to generate a 3x3 positive semi-definite matrix but I don't know what MATLAB function can do this? Or is there any method to generate without try & check method? Also, do you know what MATLAB function can be used to check if a matrix is a positive semi-definite matrix? Thank you |
Subject: generate a positive semi-definite matrices??
From: James TursaDate: 10 Feb, 2008 03:17:33 Message: 2 of 9 |
On Sat, 9 Feb 2008 18:50:10 -0800 (PST), VijaKhara
<VijaKhara@gmail.com> wrote: >Hi all > > >I need to generate a 3x3 positive semi-definite matrix but I don't >know what MATLAB function can do this? >Or is there any method to generate without try & check method? > >Also, do you know what MATLAB function can be used to check if a >matrix is a positive semi-definite matrix? > >Thank you One way to generate a random positive semi-definite 3x3 matrix: a = rand(3,3) ata = a'*a To check, use the eig function to see that all of the eigenvalues are non-negative eig(ata) James Tursa |
Subject: generate a positive semi-definite matrices??
From: Roger StaffordDate: 10 Feb, 2008 03:48:01 Message: 3 of 9 |
VijaKhara <VijaKhara@gmail.com> wrote in message
<b082bc0e-5d7a-4bcf- ab79-478ad6a820f9@e4g2000hsg.googlegroups.com>... > Hi all > > > I need to generate a 3x3 positive semi-definite matrix but I don't > know what MATLAB function can do this? > Or is there any method to generate without try & check method? > > Also, do you know what MATLAB function can be used to check if a > matrix is a positive semi-definite matrix? > > Thank you ----------- 1. Generate a random 3 x 3 unitary matrix and a random set of three non- negative eigenvalues. A = randn(3); [U,ignore] = eig((A+A')/2); % (Don't really have to divide by 2) M = U*diag(abs(randn(3,1)))*U'; Then M is a randomly determined positive semi-definite matrix. 2. Check that M is positive semi-definite: all(diag(eig((M+M')/2))) >= 0 If this is true, then M is positive semi-definite Roger Stafford |
Subject: generate a positive semi-definite matrices??
From: James TursaDate: 10 Feb, 2008 08:38:01 Message: 4 of 9 |
James Tursa <aclassyguywithaknotac@hotmail.com> wrote in
message <0rqsq3tqr22j3e1h3emodegqmra5bd76rt@4ax.com>... > On Sat, 9 Feb 2008 18:50:10 -0800 (PST), VijaKhara > <VijaKhara@gmail.com> wrote: > > >Hi all > > > > > >I need to generate a 3x3 positive semi-definite matrix but I don't > >know what MATLAB function can do this? > >Or is there any method to generate without try & check method? > > > >Also, do you know what MATLAB function can be used to check if a > >matrix is a positive semi-definite matrix? > > > >Thank you > > One way to generate a random positive semi-definite 3x3 matrix: > > a = rand(3,3) > ata = a'*a > > To check, use the eig function to see that all of the eigenvalues are > non-negative > > eig(ata) > > James Tursa Clarify: "ata" is the positive semi-definite matrix, not "a". |
Subject: generate a positive semi-definite matrices??
From: Roger StaffordDate: 10 Feb, 2008 09:17:02 Message: 5 of 9 |
"Roger Stafford" <ellieandrogerxyzzy@mindspring.com.invalid> wrote in
message <fols5h$e71$1@fred.mathworks.com>... > .............. > 2. Check that M is positive semi-definite: > > all(diag(eig((M+M')/2))) >= 0 > > If this is true, then M is positive semi-definite --------- In the check for M to be positive semi-definite I should have written: all(eig((M+M')/2)) >= 0 I forgot that eig with only one output produces a vector result, not a square array, and the diag operation should not be used. Second observation: There seem to be two definitions of a semi-definite matrix floating around. One, as for example in Wikipedia, insists that it both be Hermitian and have non-negative eigenvalues. The other definition, as for example in MathWorld and which I have used here, requires only that its Hermitian part, (M+M')/2, have non-negative eigenvalues. Roger Stafford |
Subject: generate a positive semi-definite matrices??
From: James TursaDate: 10 Feb, 2008 19:52:17 Message: 6 of 9 |
On Sun, 10 Feb 2008 09:17:02 +0000 (UTC), "Roger Stafford"
<ellieandrogerxyzzy@mindspring.com.invalid> wrote: >"Roger Stafford" <ellieandrogerxyzzy@mindspring.com.invalid> wrote in >message <fols5h$e71$1@fred.mathworks.com>... >> .............. >> 2. Check that M is positive semi-definite: >> >> all(diag(eig((M+M')/2))) >= 0 >> >> If this is true, then M is positive semi-definite >--------- > In the check for M to be positive semi-definite I should have written: > > all(eig((M+M')/2)) >= 0 > >I forgot that eig with only one output produces a vector result, not a square >array, and the diag operation should not be used. > > Second observation: There seem to be two definitions of a semi-definite >matrix floating around. One, as for example in Wikipedia, insists that it both >be Hermitian and have non-negative eigenvalues. The other definition, as for >example in MathWorld and which I have used here, requires only that its >Hermitian part, (M+M')/2, have non-negative eigenvalues. > >Roger Stafford > Where, exactly, are you getting these definitions from? Can you post some web links? The Hermitian restriction does not agree with my understanding at all. For a matrix M to be positive semi-definite, it simply has to satisfy this (which I am sure you already know but I repeat for others): x' * M * x >= 0 for all non-zero vectors x where x' is the complex conjugate transpose operator. And testing the sign of all of the eigenvalues of M is a necessary and sufficient test for this. I am not sure what the M + M' calculation in your post (from other links) has to do with this. For example, see this wiki link which agrees with my understanding: http://en.wikipedia.org/wiki/Positive-definite_matrix Here is an example of a random matrix I generated in MATLAB that is not Hermitian but is positive semi-definite: 0.95012928514718 0.48598246870930 0.45646766516834 0.23113851357429 0.89129896614890 0.01850364324822 0.60684258354179 0.76209683302739 0.82140716429525 A Hermitian matrix (i.e., where isequal(M,M') is true ) *will* be positive semi-definite (an easy thing to prove), but it is not a necessary condition for positive semi-definiteness. Perhaps this is where the confusion is? James Tursa |
Subject: generate a positive semi-definite matrices??
From: Roger StaffordDate: 10 Feb, 2008 21:55:03 Message: 7 of 9 |
James Tursa <aclassyguywithaknotac@hotmail.com> wrote in message
<3dkuq3ls0516g4inapn6hvll7sac7k44np@4ax.com>... > On Sun, 10 Feb 2008 09:17:02 +0000 (UTC), "Roger Stafford" > <ellieandrogerxyzzy@mindspring.com.invalid> wrote: > > Second observation: There seem to be two definitions of a semi-definite > >matrix floating around. One, as for example in Wikipedia, insists that it both > >be Hermitian and have non-negative eigenvalues. The other definition, as for > >example in MathWorld and which I have used here, requires only that its > >Hermitian part, (M+M')/2, have non-negative eigenvalues. > >Roger Stafford > > Where, exactly, are you getting these definitions from? Can you post > some web links? The Hermitian restriction does not agree with my > understanding at all. For a matrix M to be positive semi-definite, it > simply has to satisfy this (which I am sure you already know but I > repeat for others): > > x' * M * x >= 0 for all non-zero vectors x > > where x' is the complex conjugate transpose operator. > > And testing the sign of all of the eigenvalues of M is a necessary and > sufficient test for this. I am not sure what the M + M' calculation in > your post (from other links) has to do with this. For example, see > this wiki link which agrees with my understanding: > > http://en.wikipedia.org/wiki/Positive-definite_matrix > > Here is an example of a random matrix I generated in MATLAB that is > not Hermitian but is positive semi-definite: > > 0.95012928514718 0.48598246870930 0.45646766516834 > 0.23113851357429 0.89129896614890 0.01850364324822 > 0.60684258354179 0.76209683302739 0.82140716429525 > > A Hermitian matrix (i.e., where isequal(M,M') is true ) *will* be > positive semi-definite (an easy thing to prove), but it is not a > necessary condition for positive semi-definiteness. Perhaps this is > where the confusion is? > > James Tursa ---------- I dug up a few web sites pertinent to this matter, James. You'll note that the first one is the site you mentioned. In its first paragraph, which I quote below, it appears to restrict positive definite matrices to those that are Hermitian. The same is true of the MathWorld site for semi-definite matrices, though elsewhere MathWorld states it differently. The matter is explained in greater depth in the third site below which discusses non-Hermitian matrices in one of its paragraphs. As it states in its concluding remark in this paragraph, "There is no agreement in the literature on the proper definition of positive-definite for non-Hermitian matrices." There are also some very similar remarks to this last in your referenced Wikipedia site. In particular you will note that if you were to require that your expression x'*M*x above be real and non-negative for all complex vectors x, then M must necessarily be Hermitian. If you only require that the real part of x'*M*x be non-negative for all complex x, then that would allow M to be non- Hermitian. Here are the web sites and quotations which I refer you to: ----------------------------------------------------- http://en.wikipedia.org/wiki/Positive-definite_matrix "In linear algebra, a positive-definite matrix is a Hermitian matrix which in many ways is analogous to a positive real number." ----------------------------------------------------- http://mathworld.wolfram.com/PositiveSemidefiniteMatrix.html "A positive semidefinite matrix is a Hermitian matrix all of whose eigenvalues are nonnegative." ----------------------------------------------------- http://www.halfvalue.com/wiki.jsp?topic=Positive-definite_matrix "Non-Hermitian matrices A real matrix M may have the property that xTMx > 0 for all nonzero real vectors x without being symmetric. The matrix [1 1 0 1] provides an example. In general, we have xTMx > 0 for all real nonzero vectors x if and only if the symmetric part, (M + MT) / 2, is positive definite. The situation for complex matrices may be different, depending on how one generalizes the inequality z*Mz > 0. If z*Mz is real for all complex vectors z, then the matrix M is necessarily Hermitian. So, if we require that z*Mz be real and positive, then M is automatically Hermitian. On the other hand, we have that Re(z*Mz) > 0 for all complex nonzero vectors z if and only if the Hermitian part, (M + M*) / 2, is positive definite. In summary, the distinguishing feature between the real and complex case is that, a bounded positive operator on a complex Hilbert space is necessarily Hermitian, or self adjoint. The general claim can be argued using the polarization identity. That is no longer true in the real case. There is no agreement in the literature on the proper definition of positive- definite for non-Hermitian matrices." ----------------------------------------------------- Roger Stafford |
Subject: generate a positive semi-definite matrices??
From: James TursaDate: 11 Feb, 2008 08:58:50 Message: 8 of 9 |
On Sun, 10 Feb 2008 19:52:17 GMT, James Tursa
<aclassyguywithaknotac@hotmail.com> wrote: >A Hermitian matrix (i.e., where isequal(M,M') is true ) *will* be >positive semi-definite ... *groan* ... I meant to write that a Hermitian matrix has real eigenvalues, not that it is necessarily positive semi-definite. |
Subject: generate a positive semi-definite matrices??
From: Lanyi XuDate: 11 Feb, 2008 14:23:02 Message: 9 of 9 |
James Tursa <aclassyguywithaknotac@hotmail.com> wrote in
message <7930r31i4p1uenb58ac90nve3giru5el1a@4ax.com>... > On Sun, 10 Feb 2008 19:52:17 GMT, James Tursa > <aclassyguywithaknotac@hotmail.com> wrote: > >A Hermitian matrix (i.e., where isequal(M,M') is true ) *will* be > >positive semi-definite ... > > *groan* ... I meant to write that a Hermitian matrix has real > eigenvalues, not that it is necessarily positive semi- definite. let's a = 0.8147 0.9134 0.2785 0.9058 0.6324 0.5469 0.1270 0.0975 0.9575 then; >> ata=a'*a; >> eig(ata) ans = 0.0329 0.7038 3.3007 >> ata2=(a'+a); >> eig(ata2) ans = -0.4007 1.6130 3.5969 So, that means (a'+a)/2 may not be a positive-define matrix. Regard Lanyi |
No comments:
Post a Comment