MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: gives different result compared to 1/Diagonal[Normal@A] when A is sparse

  • To: mathgroup at smc.vnet.net
  • Subject: [mg123308] Re: gives different result compared to 1/Diagonal[Normal@A] when A is sparse
  • From: Daniel Lichtblau <danl at wolfram.com>
  • Date: Thu, 1 Dec 2011 05:50:22 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com

On 11/30/2011 06:50 AM, Oliver Ruebenkoenig wrote:
> 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

I'm not sure this is a bug (he said, disagreeably).

Diagonal returns a SparseArray and preserves the implicit element value 
(which in this case is zero). So inverting that new SparseArray gives 
ComplexInfinity for the implicit value. Even though that value is not 
needed because all entries are given explicitly.

The SparseArray result does in fact have .25 for the actual values.

Daniel Lichtblau
Wolfram Research


> 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: FindShortestTour Function- Roundtrip & Constructive Heuristic
  • Next by Date: Re: gives different result compared to 1/Diagonal[Normal@A] when A is sparse
  • Previous by thread: Re: FindShortestTour Function- Roundtrip & Constructive Heuristic
  • Next by thread: Re: gives different result compared to 1/Diagonal[Normal@A] when A is sparse