1/Diagonal[A] gives different result compared to 1/Diagonal[Normal@A] when A is sparse
- To: mathgroup at smc.vnet.net
- Subject: [mg123270] 1/Diagonal[A] gives different result compared to 1/Diagonal[Normal@A] when A is sparse
- From: "Nasser M. Abbasi" <nma at 12000.org>
- Date: Wed, 30 Nov 2011 03:18:50 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
I found this strange behavior, and I do not think it is correct. This is version 8.04. 1/Diagonal[A] gives a divide by zero error, but 1/Diagonal[Normal@A] does not. This is when A is sparse. ------------------------------ Clear["Global`*"] makeMatrix[n_]:=Module[{numberOfUnknowns=n^2,r,A}, A=SparseArray[ { Band[{1,1}]->4.0, Band[{2,1}]->-1, Band[{1,2}]->-1, Band[{1,n+1}]->-1, Band[{n+1,1}]->-1 },{numberOfUnknowns,numberOfUnknowns},0. ]; r=Range[n,n^2-n,n]; (A[[#,#+1]]=0.)&/@r; (A[[#+1,#]]=0.)&/@r; A ]; (A = makeMatrix[3])//MatrixForm (Diagonal[A])//Normal 1/Diagonal[Normal@A] (* ===> OK *) 1/Diagonal[A] (* error *) ---------------------------------------- So, 1/Diagonal[Normal@A] gives {0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25} but 1/Diagonal[A] gives 1/0 In another system I use, both operations give {0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25} i.e. if the matrix is sparse or not, 1/Diagonal[A] should work regardless. I think sparse matrices need to be more integrated into all Mathemaitca matrix operations. Or Am I missing something here? Thanks, --Nasser