Re: Related quastions. Question 2

*To*: mathgroup at smc.vnet.net*Subject*: [mg57542] Re: Related quastions. Question 2*From*: dh <dh at metrohm.ch>*Date*: Wed, 1 Jun 2005 06:01:28 -0400 (EDT)*References*: <d7dp49$qav$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Hello Kazimir, you want to automatically thread over Equal. There is a small pitfall, you can not thread over Set, otherwise equation = .. == .. will not work. Well, this can be done be redefining Equal like e.g.: Unprotect[Equal]; f_[x1___, Equal[y1_, y2___], x2___] ^:= Equal[f[x1, y1, x2], f[x1, y2,x2]] /; f =!= Set This defines an UpValue for Equal that threads any operator except Set over Equal. Here is a (silly?) example: eq= x == (a+b)^2 eq - (a^2+2 a b + b^2) gives -a^2-2*a*b-b^2+x ==-a^2-2*a*b-b^2+(a+b)^2 eq - (a^2+2 a b + b^2) //Expand gives -a^2-2*a*b-b^2+x == 0 Sincerely, Daniel Kazimir wrote: > Dear Bob, > > you gave the example > > Print["Equation to solve for x"] > a x + b == c > Print["Subtract b from each side"] > # - b & /@ %% > Print["Divide each side by a"] > #/a & /@ %% > > It works but i do not like very much expressions with %%, as I should > not insert more lines before it or I have to modify this symbol. I > would like to start with > > expr= (a x + b == c) > > and then make a transform like expr1 = expr - b. It clearly does not > work. Could you advise me a mathematical operartion over expression > which would return a x == c - b . > > The best thing I found was > expr = (a x + b == c) > Distribute[#1 - b &@expr, Equal] > however, it does not work in all cases that I need. > > Vlad >