# 1/Diagonal[A] gives different result compared to 1/Diagonal[[email protected]] when A is sparse

Discussion in 'Mathematica' started by Nasser M. Abbasi, Nov 30, 2011.

1. ### Nasser M. AbbasiGuest

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[[email protected]] 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[[email protected]] (* ===> OK *)
1/Diagonal[A] (* error *)

----------------------------------------

So, 1/Diagonal[[email protected]] 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

Nasser M. Abbasi, Nov 30, 2011

Ask a Question

## Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.