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?