Re: gives different result compared to 1/Diagonal[Normal@A] when A is sparse
- To: mathgroup at smc.vnet.net
- Subject: [mg123301] Re: gives different result compared to 1/Diagonal[Normal@A] when A is sparse
- From: Oliver Ruebenkoenig <ruebenko at wolfram.com>
- Date: Wed, 30 Nov 2011 07:50:04 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
I filed this as a bug. One small side note: You might want to use A[[r, r + 1]] = 0.; A[[r + 1, r]] = 0.; instead of A[[..]]=0.& /@ r. Extraction/Setting of SA componets is vectoriezed. Oliver On Wed, 30 Nov 2011, Nasser M. Abbasi wrote: > 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 > >