Re: Problem with "Which"
- To: mathgroup at smc.vnet.net
- Subject: [mg122221] Re: Problem with "Which"
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Fri, 21 Oct 2011 06:24:16 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
On 10/20/11 at 7:44 AM, sb at 9y.com (mbmb) wrote:
>Who can check my module?
>KD[f0_, a0_, b0_] := Module[{f = f0, a = a0, b = b0}, f2 = D[f, {x,
>2}]; ew = Solve[D[f, x] == 0, x, Reals]; Print["Extremwerte: ",
>{Which[f2 > 0, "T", f2 < 0, "H", f2 = 0, "S" ], x, f} /. ew];
>Print["Extremwerte: ", {If[f2 > 0, "T", "H" ], x, f} /. ew];
>]
>When I enter: KD[x^3 - 3 x^2, -1, 4] the output is
>Extremwerte: {{Which[-6+6 x<0,H,f2=0,S],0,0},{T,2,-4}}
>whereas the IF-line gives
>Extremwerte: {{H,0,0},{T,2,-4}}
>Why can't I use Which in this case. Why doesn't Mathematica evaluate
>f2 in all cases?
Mathematica is evaluating f2 to 6 x - 6 in all cases. But,
Mathematica cannot do the comparison until a value is
substituted for x. It is the substitution that is creating the problem.
In the case of the If, there is only one substitution per value
of x to be done. This happens, the comparison takes place you
are expecting and you get the output you expect.
In the case of Which, the substitution occurs in the first
expression with x only. So, when 0 is substituted for x, the
first test evaluates as false and no other test gets evaluated.
Then when 2 is substituted for x, the first test evaluates as
true and not other test gets evaluated.
Since nothing evaluates as true when 0 is substituted for x, you
get the Which statement returned unevaluated.
Also, note your code as
Which[f2 > 0, "T", f2 < 0, "H", f2 = 0, "S" ]
instead of
Which[f2 > 0, "T", f2 < 0, "H", f2 == 0, "S" ]
That is your last "test" sets f2 to 0 which I suspect is not
what you intended