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