Eigenvalues, eigenvectors, matrix ranks, determinants, and all that stuff
- To: mathgroup at smc.vnet.net
- Subject: [mg125484] Eigenvalues, eigenvectors, matrix ranks, determinants, and all that stuff
- From: Konstantin <kparchevsky at gmail.com>
- Date: Thu, 15 Mar 2012 00:31:40 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
I was calculating eigenvalues and eigenvectors of a square matrix and found odd behaviour of Mathematica and, possibly, serious bug. I need to calculate eigenvalues and eigenvectors of 8x8 square matrix A1: u rho 0 0 0 0 0 0 0 u 0 0 1/rho 0 By/(4 pi rho) Bz/(4 pi rho) 0 0 u 0 0 0 -Bx/(4 pi rho) 0 0 0 0 u 0 0 0 - Bx/(4 pi rho) 0 rho cs^2 0 0 u 0 0 0 0 0 0 0 0 u 0 0 0 By -Bx 0 0 0 u 0 0 Bz 0 -Bx 0 0 0 u Very often algebraic manipulations in Mathematica do not produce expected result just because we and the program have different defaul assumptions about type of variables. So I tried to specify EVERYTHING about my variables explicitly ( @ means "belongs to", != means "not equal" ) $Assumptions = u@Reals && u!=0 && Bx@Reals && By@Reals && Bz@Reals && Bx!=0 && By!=0 && Bz!=0 && rho>0 && cs>0; Calculate eigenfalues. Eigenvalues[A1] Output> {u, u, u - Bx/(2 Sqrt[pi rho]), u + Bx/(2 Sqrt[pi rho]), ... Other four eigenvalues are too big and not important for the discussion. Physical meaning of the eigenvalues are velocities of waves. I want them to have fixed sign, so each eigenvalue corresponds to the wave, traveling in the fixed (positive or negative) direction. The problem is that magnetic field Bx can be either positive or negative. I do not want the sign of eigenvalues depends on the sign of the magnetic field. I want my eigenvalues look like this: {u, u, u - Abs[Bx]/(2 Sqrt[pi rho]), u + Abs[Bx]/(2 Sqrt[pi rho]), ... and I want to have corresponding eigenvectors. It is easy to verify, that these values really are eigenvalues, so we are good for now. Command Eigenvalues[ ... ] cannot help. Well, I am a big boy and know how to do this "manually". Following the definition of eigenvectors I wrote a system (A - lam * I) v = 0 V1 V2 V3 V4 Tmp = ( A1 - (u + Abs[Bx]/(2 Sqrt[pi rho])) DiagonalMatrix[{1,1,1,1,1,1,1,1}] ) . V5 V6 V7 V8 eqns = {Tmp[[1,1]]==0, Tmp[[2,1]]==0, Tmp[[3,1]]==0, Tmp[[4,1]]==0, Tmp[[5,1]]==0, Tmp[[6,1]]==0, Tmp[[7,1]]==0, Tmp[[8,1]]==0}; Solve[eqns, {V1,V2,V3,V4,V5,V6,V7,V8}] Output> {{V1->0, V2->0, V3->0, V4->0, V5->0, V6->0, V7->0, V8->0, }} Mathematica returns A TRIVIAL SOLUTION. By the way, if I replace Abs[Bx] by By in the equation for Tpm, Mathematica returns non-trivial solution. I decided to check the rank of the matrix MatrixRank[ A1 - (u + Abs[Bx]/(2 Sqrt[pi rho])) DiagonalMatrix[{1,1,1,1,1,1,1,1}] ] Output> 8 WOW!!!! It thinks, that the matrix has full rank. In other words ALL columns and rows ARE LINEARLY INDEPENDENT. If this were true, than the homogeneous system of linear equations must have only trivial solution. But we know this cannot be true. I checked the determinant: Det[ A1 - (u + Abs[Bx]/(2 Sqrt[pi rho])) DiagonalMatrix[{1,1,1,1,1,1,1,1}] ] Output> 0 Can anybody explain me how square matrix with linear independent columns and rows can have zero determinant? This is definetely a bug. And this bug seriously affects the ability of Mathematica to solve systems of linear equations. I tried to isolate the problem. I tried to isolate the problem. Interestingly, the zero result for the determinant is obtained only after full simplification of pretty long expression. This gave me a clue.Run the next script on the "clean" (just started) Mathematica $Assumptions=a@Reals && a!=0; a^2/Abs[a] == Abs[a] Output> a^2/Abs[a] == Abs[a] Thats it! It did not turn this equality into True, because it does not understand, that the left and the right sides are the same. This means, that Mathematica considers this as real equality, not identity, that affects the ability to calculate matrix rank correctly. ONLY AFTER full simplification it returns True. I do not know details how MatrixRank[] works. If it does not do full simplification on the intermediate step, the command cannot correctly distinguish equation from identity, that causes errors in rank determination. Is there any work around to find this eigenvector instead of "manual" eliminating variables in eqns? Thank you.