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. 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
    #1
    1. Advertisements

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.