Re: Differencing two equations

*To*: mathgroup at smc.vnet.net*Subject*: [mg131484] Re: Differencing two equations*From*: Bob Hanlon <hanlonr357 at gmail.com>*Date*: Mon, 5 Aug 2013 23:08:50 -0400 (EDT)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*Delivered-to*: l-mathgroup@wolfram.com*Delivered-to*: mathgroup-outx@smc.vnet.net*Delivered-to*: mathgroup-newsendx@smc.vnet.net*References*: <20130210082414.C3A5F6937@smc.vnet.net>

If you want to ensure that the inputs are equalities (and of the same length) just include the constraints in the function definition. equationOperate::usage = "equationOperate[equation1, equation2, operation] performs a listable operation (e.g., Plus, Subtract, Times, Divide) on the input equations. For example, equationOperate[a == b, c == d, Subtract] produces the equation a - c == b - d"; equationOperate[eqn1_Equal, eqn2_Equal, op_] := Equal @@ op @@ List @@@ {eqn1, eqn2} /; Length[eqn1] == Length[eqn2]; SetAttributes[f, Listable] equationOperate[a == r, b == s, #] & /@ {Subtract, Plus, Times, Divide, Power, Power[#2, #1] &, f} {a - b == r - s, a + b == r + s, a*b == r*s, a/b == r/s, a^b == r^s, b^a == s^r, f[a, b] == f[r, s]} equationOperate[a == r == x, b == s == y, #] & /@ {Subtract, Plus, Times, Divide, Power, Power[#2, #1] &, f} {a - b == r - s == x - y, a + b == r + s == x + y, a*b == r*s == x*y, a/b == r/s == x/y, a^b == r^s == x^y, b^a == s^r == y^x, f[a, b] == f[r, s] == f[x, y]} Bob Hanlon On Mon, Aug 5, 2013 at 6:04 AM, David Bailey <dave at removedbailey.co.uk>wrote: > On 11/02/2013 09:36, Murray Eisenberg wrote:> Yeah, Mathematica > stubbornly refuses t > > > >> I'm brand new to Mathematica, so I apologize for the naive questions... > >> > >> I'm trying to figure out how to difference two equations. Basically > if I have: > >> a==r > >> b==s > >> > >> I'd like to get: > >> a-b == r-s > >> > >> What I'm getting is more like (a==r) - (b==s). I'm not sure how > that's a useful result, but is there a function to do what I'm looking for? > >> > >> A quick search of the archives seem to bring up ways of doing this > from using transformation rules to swap heads to unlocking the Equals > operator and hacking its behavior. I'd like to avoid doing that kind of > rewiring for a simple operation, and I'd like to keep the syntax clean. > >> > >> The Core Language documentation makes a big point of how everything > is basically a list with different heads. In this case, what I'm trying > to do would work if it were treated as a list ({a,b}-{r,s} returns > {a-b,r-s}) but doesn't work under Equal. > >> > >> Thanks for any suggestions. > > > > I think it helps to manipulate algebraic expressions in a way that makes > it easy to understand when you come back to a notebook sometime later! > So my approach would be to define a function to subtract equations, so > that it is pretty obvious what is going on! > > In[16]:= subtract[a1_ == a2_, b1_ == b2_] := (a1 - b1) == (a2 - b2) > > In[17]:= subtract[x + 3 y == 6, x - y == 2] > > Out[17]= 4 y == 4 > > This also has the advantage that if you accidentally supply an argument > that is not an equality, you will not get a misleading answer! > > A slightly more general function might take a third argument that would > act as a multiplier of the second equality: > > In[20]:= combine[a1_ == a2_, b1_ == b2_, > k_] := (a1 + k b1) == (a2 + k b2) > > In[21]:= combine[x + 3 y == 6, x - y == 2, -1] > > Out[21]= 4 y == 4 > > In[23]:= combine[x + 3 y == 6, x - y == 2, 3] // Simplify > > Out[23]= x == 3 > > (You could also include the Simplify as part of your combine function) > > David Bailey > http://www.dbaileyconsultancy.co.uk > > >