Re: question about Block
- To: mathgroup at smc.vnet.net
- Subject: [mg69718] Re: question about Block
- From: "Jens-Peer Kuska" <kuska at informatik.uni-leipzig.de>
- Date: Thu, 21 Sep 2006 07:31:08 -0400 (EDT)
- Organization: Uni Leipzig
- References: <eeqpqm$oel$1@smc.vnet.net>
Hi, since there is no function, that tell you the answer to the question is message func::xyz On or Off you can't switch off the message in your functions, because you will change a global state. So, if you wish to turn off the messages inside of your function but don't change the global state you have to use the Block[{Message},..] construction. Regards Jens <dimmechan at yahoo.com> schrieb im Newsbeitrag news:eeqpqm$oel$1 at smc.vnet.net... | Hello to all. | | Block as it is well known to the members of this forum does have some | nice applications. | For example | | $Version | "5.2 for Microsoft Windows (June 20, 2005)" | | Block[{Message}, Integrate[1/x, {x, -1, 2}]] | Infinity | Block[{Message}, NIntegrate[Sin[x]/x, {x, 0, Infinity}]] | 2.6457805920701 | | (execute the commands without Block to see the messages) | | Let me now define a list of two functions. | | lst = {1/x, 1/x^2}; | | Then | | NIntegrate[lst, {x, 1, 2}] | \!\(NIntegrate::"inum" : "Integrand \!\({1\/x, | 1\/x\^2}\) is not numerical at \!\({x}\) = {1.5`}."\) | NIntegrate[lst, {x, 1, 2}] | | because NIntegrate has the attribute HoldAll | | Attributes[NIntegrate] | {HoldAll, Protected} | | Of course | | NIntegrate[Evaluate[lst], {x, 1, 2}] | {0.693147180559947, 0.5000000000000211} | | Now to my surprise I discovered that the following commands fail to | prevent the appearance of NIntegrate::inum message. | | Block[{Message}, NIntegrate[lst, {x, 1, 2}]] | \!\(NIntegrate::"inum" : "Integrand \!\({1\/x, | 1\/x\^2}\) is not numerical at \!\({x}\) = {1.5`}."\) | NIntegrate[lst, {x, 1, 2}] | | Block[{$Messages = {}}, NIntegrate[lst, {x, 1, 2}]] | \!\(NIntegrate::"inum" : "Integrand \!\({1\/x, | 1\/x\^2}\) is not numerical at \!\({x}\) = {1.5`}."\) | NIntegrate[lst, {x, 1, 2}] | | What is more strange is that the relevant Plot::plnr message can be | prevented. | | Plot[lst, {x, 1, 2}, DisplayFunction -> Identity]; | Plot::plnr : lst is not a machine-size real number at x = | 1.0000000416666666`. (...3 times...) | General::stop : Further output of Plot::plnr will be suppressed during | this \ | calculation. | | Attributes[Plot] | {HoldAll, Protected} | | Block[{Message}, Plot[lst, {x, 1, 2}, DisplayFunction -> Identity]]; | Block[{$Messages = {}}, Plot[lst, {x, 1, 2}, DisplayFunction -> | Identity]]; | | Of course someone can simply switch off the message. | | Off[NIntegrate::inum] | NIntegrate[lst, {x, 1, 2}] | NIntegrate[lst, {x, 1, 2}] | | On[NIntegrate::inum] | | but the question remains why exist this strange (at least for me) | situation. | | Any comments/suggestions? | | Dimitris |