MathGroup Archive 2005

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

Search the Archive

Re: Re: How does NIntegrate suppress messages?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg62508] Re: [mg62461] Re: How does NIntegrate suppress messages?
  • From: "Ingolf Dahl" <ingolf.dahl at telia.com>
  • Date: Sat, 26 Nov 2005 02:47:07 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

Hi
A general method to suppress messages from Check is the following:

  Block[{$Messages = {}}, Check[expr, failexpr]]

My theory is that Nintergrate uses the same mechanism. Can we find a way to
unsuppress the messages? 

One example:

  func[x_]:=1/x;

  x=0;Check[func[x],"Divide by zero"]

gives both a message and evalutated failexpr, but 

  x = 0; Block[{Set[$Messages, {}]}, Check[func[x], "Divide by zero"]]

just evaluates failexpr. We might turn on the messages by redefining the
function:

  newfunc[x_] := Block[{Set[$Messages, {OutputStream["stdout", 1]}]},
func[x]];

  x = 0; Block[{Set[$Messages, {}]}, Check[newfunc[x], "Divide by zero"]]

will give us the message back. To apply the same on NIntegrate is a bit
tricky.Define first 
 
  f::err = "error"; f[x_?NumericQ] := ( Message[f::err]; x ) 

Then 

  NIntegrate[f[x], {x, 0, 1}]

will give no messages. Embedd f in a new function in the following ways:

   newf[ x_?NumericQ]:= ( Block[ { $MessageList=msl, $Messages= {
OutputStream[     "stdout",1]}}, { f[x], msl=$MessageList}[[1]]])
 
  msl = {}; NIntegrate[newf[x], {x, 0, 1}]

will then give you error messages. The NumericQ test is essential.

Best regards

Ingolf Dahl
Sweden



> -----Original Message-----
> From: Andrew Moylan [mailto:andrew.moylan at anu.edu.au] 
To: mathgroup at smc.vnet.net
> Sent: den 25 november 2005 08:25
> Subject: [mg62508] [mg62461] Re: How does NIntegrate suppress messages?
> 
> It's quite a mystery. My guess is that NIntegrate temporarily 
> redefines the Message[...] function.
> 
> Personally, I want to know because I want to copy this 
> behaviour of NIntegrate for my own functions, if it is easy. 
> Often I write code that uses Check, and I don't want the 
> messages generated and appearing as errors and clogging up the output.
> 
> "Alan" <info at optioncity.REMOVETHIS.net> wrote in message 
> news:dm499k$srh$1 at smc.vnet.net...
> >
> > "Andrew Moylan" <andrew.moylan at anu.edu.au> wrote in message 
> > news:dm1b0v$ic1$1 at smc.vnet.net...
> >> Whenever the integrand in NIntegrate generates messages 
> (by calling 
> >> Message), the output of these messages are suppressed, 
> although they 
> >> are still generated in the sense that they can be caught 
> using Check. 
> >> Does anyone know how NIntegrate does this?
> >
> > I don't, but your post answers a question of mine about 
> behavior which 
> > has always seemed a puzzle. Often I will wrap a complicated 
> > computation in a Check in order to Abort[] on any message. Then, I 
> > will sometimes get an Abort[], but no message! And, indeed, 
> often an 
> > NIntegrate is involved. When that occurs, I have never been able to 
> > re-write the code to retrieve those missing messages.
> > So if there is a way to "unsuppress", that will be helpful 
> to me, too.
> >
> > regards,
> > alan
> >
> > 
> 
> 
> 



  • Prev by Date: Re: problems with typesetting in packages
  • Next by Date: Re: Problems with brackets when exporting postscript
  • Previous by thread: Re: How does NIntegrate suppress messages?
  • Next by thread: Re: How does NIntegrate suppress messages?