Re: How to define a polyfunction?

*To*: mathgroup at smc.vnet.net*Subject*: [mg27421] Re: How to define a polyfunction?*From*: "Allan Hayes" <hay at haystack.demon.co.uk>*Date*: Sun, 25 Feb 2001 00:53:48 -0500 (EST)*References*: <974vp8$6jh@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Liwen, You get, golf=t^2-t; Key[t_]:=If[(D[golf[t],t]>0),(t^4+t*3),(t^2.5-t)]; Key[2] General::ivar: 2 is not a valid variable. If[D[(-t + t^2)[2], 2] > 0, 2^4 + 2*3, 2^2.5 - 2] Two problems: a) 2 is passed to the right giving D[golf[2],2], which makes no sense b) golf is not a function, so even golf[2]] would not work as you would like We also need to consider the possible effect of an of t having a value when golf and Key are defined or when Key is used. golf[2] \!\(\((\(-t\) + t\^2)\)[2]\) Some suggestions Following b) Define a function golf; use its derivative, golf', use SetDelayed, :=, Clear["`*"] t=3; golf[t_]:=t^2-t; Key[t_]:=If[(golf'[t]>0),(t^4+t*3),(t^2.5-t)]; Key[2] 22 Following a) Separate the two roles of t; use SetDelayed and Block Clear["`*"] t=3; golf:=t^2-t; Key[s_]:= Block[{t}, If[(D[golf,t]/.t\[Rule]s )>0,(s^4+s*3),(s^2.5-s)] ]; Key[2] 22 Similarly Clear["`*"] t=3; golf:=t^2-t; Key[s_]:= Block[{t}, If[D[golf,t]>0,(#^4+#*3),(#^2.5-#)]&[s] ] Key[2] 22 and thirdly, Clear["`*"] t=3; golf:=t^2-t; Key[s_]:= Block[{ t=s}, Block[{t}, If[D[golf,t]>0,(s^4+s*3),(s^2.5-s)] ] ]; Key[2] 22 -- Allan --------------------- Allan Hayes Mathematica Training and Consulting Leicester UK www.haystack.demon.co.uk hay at haystack.demon.co.uk Voice: +44 (0)116 271 4198 Fax: +44 (0)870 164 0565 "liwen liwen" <gzgear at yahoo.com> wrote in message news:974vp8$6jh at smc.vnet.net... > Dear friend, > How are you!Now I encounter a problem that I > can not solve for a long time . > It can be express simplely as how to define a > polyfunction,for example,a simple polyfunction may be > defined as that: > > Key[t_]:=If[(t>0),1,0]; > > It is easy to define.However,it will be more difficult > when the condition turns more complicate.For instance: > golf=t^2-t; > Key[t_]:=If[(D[golf[t],t]>0),(t^4+t*3),(t^2.5-t)]; > > > Best regards, > > > Liwen > E-mail: gzgear at yahoo.com > > __________________________________________________ > Do You Yahoo!? > Yahoo! Auctions - Buy the things you want at great prices! http://auctions.yahoo.com/ >