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 > > > > > > >