MathGroup Archive 1998

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

Search the Archive

Re: stack over flow

  • To: mathgroup at smc.vnet.net
  • Subject: [mg13631] Re: stack over flow
  • From: tburton at brahea.com (Tom Burton)
  • Date: Thu, 06 Aug 1998 11:27:15 GMT
  • Organization: Brahea, Inc.
  • References: <35c6749c.0@newsread.cioe.com>
  • Sender: owner-wri-mathgroup at wolfram.com

Hello,

CplexMatindMatval[DiagonalMatrix[Range[500]]] generated a stack overflow
in the kernel on my machine (P166 Windows95), version 3.0.1.0x. I
suggest that you report this as a possible bug to support at wolfram.com.
Meanwhile, if I understand what your function does, here is a suggested
replacement that doesn't generate the stack overflow.

matNZ[(m_)?MatrixQ] := Module[{
  nc = Last[Dimensions[m]],
  p = Position[Map[#1 != 0 & , m, {2}], True]},
 {p /. {i_, j_} :> nc*(i - 1) + j, Extract[m, p]} ]

Tom Burton

On Mon, 3 Aug 1998 21:46:27 -0500, in comp.soft-sys.math.mathematica you
wrote:

>Hello: I've written a small function that causes a stack overflow on my
>machine.  I'm wondering if the same happens in other machines.  I'm 
running
>MA v3.0.1 under NT4 (sp3) on a PII400.
>
>I've re-written the function without the Do[ ] and it works fine, but 
I'd
>like to
>understand how a stack overflow occurs in this particular piece of code.
>For dense matrices, the function works as expected; for sparse matrices
>(eg. DiagonalMatrix[500]) the overflow occurs.
>
>Here's the code (Basically, the objective is to determine the non-zero
>elements and to determine their corresponding row location):
>
>CplexMatindMatval[m_?MatrixQ]:=
>Module[{indx, matindx, matList, rem},
>     matList = Flatten[Transpose[m]];
>     With[{numRows = Length[m]},
>          indx = { };
>          Do[
>               rem = Mod[k,numRows];
>               indx = {indx, If[rem == 0, numRows, rem]}
>          ,
>          {k, Length[matList]}
>          ]
>     ];
>
>     (* get the position of the nonzero elements only *)
>
>h[{
 >            nzElemIndx = Position[(# != 0&)/@ matList,True]//Flatten
>            },
>          (* subtract 1 to get zero-offset indices *)
>          matindx = Flatten[indx][[nzElemIndx]]-1;
>          {matindx, matList[[nzElemIndx]]}
>     ]
>]
>
>Michael Ringor
>Purdue University
>
>

Tom Burton


  • Prev by Date: unwrapping ArcTan
  • Next by Date: linking c++ and mathematica
  • Previous by thread: Re: unwrapping ArcTan
  • Next by thread: linking c++ and mathematica