Re: Stop on message?
- To: mathgroup at smc.vnet.net
- Subject: [mg126673] Re: Stop on message?
- From: Christoph Lhotka <christoph.lhotka at fundp.ac.be>
- Date: Wed, 30 May 2012 04:11:05 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201205260911.FAA07083@smc.vnet.net> <jpspa5$hb9$1@smc.vnet.net> <201205290947.FAA06698@smc.vnet.net> <4FC4F454.3010700@fundp.ac.be> <CAJDnrnpo2F-emO=0zv9bcT=Tyu86vEnwJkkjx8PvVq=pFjsO4w@mail.gmail.com>
Hello, thank you for your detailed answer. The two examples you mention are in good agreement with my argumentation: A message marks an error or a warning and should be taken as a motivation to change the code until those messages disappear: Example 1: Solve[-26.81 == 194 k + k*l*32.9 && 22.2 == -74 k + k*l*59.7, {k, l}] The "error" is that one uses a function which is designed to return an exact solution for an inexact equation. The solution to the "message problem" is not (!) to wrap Quiet[] around the code but to use the right function for the right purpose, which in that case is NSolve: NSolve[-26.81 == 194 k + k*l*32.9 && 22.2 == -74 k + k*l*59.7, {k, l}] No message is generated any more. Example 2: FindMinimum[x^2/2 + Cos[x], {x, 1}] The essential part of the message, which is returned is the sentence: "...The line search decreased the step size to within the tolerance specified by AccuracyGoal and PrecisionGoal but was unable to find a sufficient decrease in the function...." Which just tells us that the function FindMinimum was unable to do the job, so the result is questionable. Fortunately, Mathematica gives you a hint how to deal with the issue: FindMinimum[x^2/2 + Cos[x], {x, 1}, WorkingPrecision -> 24] Again, no warning message is produced. I think, that in my over 10 years of Mathematica experience I always took the right choice to 1) be sure that any function I used or developed does not produce a warning message before 2) I use them to implement another function on their basis. I also agree that the discussion maybe unessential for the interactive user. Best, Christoph On 05/29/2012 06:22 PM, Szabolcs Horvát wrote: > Hi Christoph, > > Mathematica is used interactive most of the time. It's very different > from most other programming languages in this respect. In C, or even > in Python (which has an interactive shell), most of the time people 1. > first write the program and debug it 2. then they package it up and > give it to the user to run. In Mathematica we typically don't write > stand-alone programs. The system is usually used interactive, and the > most "packaged up" things are functions meant to be used by end-users. > In other words: even the user is a programmer. > > When you make a standalone program like a text editor, your users > shouldn't see any internal warnings/errors (on Linux these messages > are often printed to the console on they're pretty uninformative to > me, as a user, 95% of the time). When you make a function for another > programmer to use, there are many reasons to keep those > errors/warning/informative messages. > > Messages are one of the way functions communicate with users. Here's > one example: > > http://mathematica.stackexchange.com/questions/6055/how-to-get-rid-of-warnings-when-using-solve-on-an-equation-with-inexact-coeffici/12 > > The input Solve[-26.81 == 194 k + k*l*32.9&& 22.2 == -74 k + k*l* > 59.7, {k, l}] issued a warning message, prompting the user to check > the answer. > > Another example is FindMinimum[x^2/2 + Cos[x], {x, 1}] (from the > docs), where an answer *is* returned, but there's also a warning that > it might be incorrect. Version 5's General::spell messages are yet > another example. > > There's no "writing" and "debugging" step here. This is the usual way > to use the system. Solve and FindMinimum are high level functions > which are probably more commonly typed than used as parts of other > functions. These examples could occur in any usual interactive > session of Mathematica. > > So, to sum up: > > Usually there's no "development phase" when you work with Mathematica. > If there is, you're probably developing a "library" for users who are > going to use it to "program" (actually just use the system > interactively), and therefore they'll need messages again. > > I hope this clears it up. > > On 29 May 2012 18:07, Christoph Lhotka<christoph.lhotka at fundp.ac.be> wrote: >> Hi, >> >> in my opinion messages in Mathematica are generated during the evaluation >> process to give >> some kind of "meta"-information about 1) what is going wrong or 2) what you >> need to know >> to check by yourself to know of the returned result is correct. >> >> I would like to compare this information with the concepts of "errors" and >> "warnings" produced >> by a compiler during the process to produce a program. >> >> Seeing "Mathematica messages" in this flavour any input which produces a >> message should be >> seen as wrong or not working properly and therefore be modified as long as >> there are no >> messages left at all. >> >> I therefore do not see a reason yet why I should use messages outside the >> development >> phase of a project. >> >> Can you provide me with one? >> >> Thanks, >> >> Christoph >> >> >> >> >> >> On 05/29/2012 11:47 AM, Szabolcs Horvát wrote: >>> There were two replies suggesting to use Check[] to abort evaluation >>> when a message is generated. >>> >>> Note that while Check does return a different result if a message was >>> generated, it does not actually interrupt evaluation (it completed the >>> evaluation of 'expr'). >>> >>> See here for an example: >>> >>> >>> http://mathematica.stackexchange.com/questions/5534/check-does-not-interrupt-evaluation-of-the-expression-when-a-message-is-emitted >>> >>> Please see here for a method that will reliably abort immediately when a >>> message is generated. >>> >>> >>> http://mathematica.stackexchange.com/questions/1512/how-to-abort-on-any-message-generated >>> >>> On 2012.05.27. 10:40, Sseziwa Mukasa wrote: >>>> Check[expr,Return[]] >>>> >>>> On May 26, 2012, at 5:11 AM, Ralph Dratman<ralph.dratman at gmail.com> >>>> wrote: >>>> >>>>> Hi, >>>>> >>>>> Is there a simple way to get Mathematica to stop evaluating (like >>>>> Interrupt) whenever a message is issued? >>>>> >>>>> I realize the debugger has that feature, but I would prefer not to use >>>>> it in this case. >>>>> >>>>> Thank you. >>>>> >>>>> Ralph Dratman >>>>>
- References:
- Stop on message?
- From: Ralph Dratman <ralph.dratman@gmail.com>
- Re: Stop on message?
- From: Szabolcs Horvát <szhorvat@gmail.com>
- Stop on message?