MathGroup Archive 2003

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

Search the Archive

Re: Detecting unsuccessful computations

  • To: mathgroup at smc.vnet.net
  • Subject: [mg39330] Re: Detecting unsuccessful computations
  • From: "Allan Hayes" <hay at haystack.demon.co.uk>
  • Date: Tue, 11 Feb 2003 04:43:22 -0500 (EST)
  • References: <b27fn8$n9t$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Uri,
I hope that the following experiment will provide some ideas for
development.
SilentCheck below is a modification of a posting by Carl Woll.

    SilentCheckPlus::usage = "SilentCheckPlus[expr, failexpr] evaluates expr
    and then gives its value, unless messages have been generated, in which
case it gives
    the value of failexpr.No messages are displayed.";

    SetAttributes[SilentCheck, HoldAll]
    SilentCheck[expr_, failexpr_]:=
      Block[{Message},
        Message[f_/;Not[MatchQ[f,_$Off]],___]:= Throw[failexpr,SilentCheck];
        Catch[expr,SilentCheck]
        ]

Define a variant of LinearSolve

     LS[m_,c_]/;c=!={}:=
      SilentCheck[LinearSolve[m,c],LS[Rest[m],Rest[c]]]

    LS[{},{}]:= $Failed


TEST

    LS[{{1, 2}, {3, 4}, {5, 6}}, {-1, 2, -3}]

        {-12, 19/2}

    LS[{{2,1},{1, 2}, {0,0}, {5, 6}}, {-1, 2, 5,6}]

        {6/5, 0}

    LS[{{2,1},{1, 2}, {0,0}, {5, 6}}, {-1, 2, 5,1}]

        {1/5, 0}

    LS[{{2,1},{1, 2}, {0,1}, {0, 0}}, {-1, 2, 5,1}]

        $Failed


--
Allan

---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565


"Uri Zwick" <zwick at tau.ac.il> wrote in message
news:b27fn8$n9t$1 at smc.vnet.net...
> Hi,
>
> Mathematica functions such as LinearSolve, LinearProgramming,
> FindMinimum and many others, sometimes cannot perform the
> requested task. (The linear system of equations has no solution, the
> linear program has no feasible points, etc.)
>
> When that happens, Mathematica usually prints some error messages
> and then returns the expression it tried to evaluate. This happens,
> for example, with LinearSolve[{{1, 2}, {3, 4}, {5, 6}}, {-1, 2, -3}].
>
> This may be reasonable when only one such calculation is performed.
> But, suppose we write a program that has to solve many linear
> programs, some of them without a feasible solution. When there is
> no solution, we want to take an appropriate action.
>
> What is the recommended way of calling a function like
> LinearProgramming and getting an indication that something
> went wrong, WITHOUT getting any error message printed?
>
> It is possible to catch errors using 'Check'. But, as far as I
> understand it only works if error messages are printed.
> It will not work if the relevant error messages are turned off
> using 'Off'.
>
> It is possible to turn off the error messages and check the head
> of the expression returned to see if it the name of the function called.
> For example:
>
> Off[LinearSolve::"nosol"] ;
>
> If[ SameQ[ Head[sol = LinearSolve[...]] , LinearSolve] ,
>     (* The calculation failed. *) ,
>     (* sol is a solution. *)  ]
>
> (Note that we have to put sol = LinearSolve[...] inside
> If[ SameQ[ Head[...] ... . If we wrote
>
> sol = LinearSolve[...] ;
> If[ SameQ[Head[sol],LinearSolve] , ... , ... ]
>
> then in case of failure, the failed calculation will be
> attempted again!)
>
> Is there a cleaner solution?
>
> Uri
>
> ---------------------------------------------------------------------
> |  Prof. Uri Zwick             |  http://www.cs.tau.ac.il/~zwick    |
> |  Dept. of Computer Science   |  zwick at post.tau.ac.il              |
> |  Tel Aviv University         |                                    |
> |  Tel Aviv 69978              |  PHONE: +972 3 6409610             |
> |  ISRAEL                      |  FAX:   +972 3 6409357             |
> ---------------------------------------------------------------------
>
>




  • Prev by Date: Re: Simplify[Abs[x],x<0]]
  • Next by Date: Re: Re: Trouble with Integrate
  • Previous by thread: Re: Detecting unsuccessful computations
  • Next by thread: Re: Detecting unsuccessful computations