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
>
>

```

• Prev by Date: Re: Problem with Patterns and Integrate
• Next by Date: Re: A function to do incomplete LU decomposition with a drop tolerance?
• Previous by thread: Mixing multiple manipulate objects