|
|
Re: How to calculate the partial derivative?
Posted:
Nov 21, 2012 5:17 AM
|
|
Dear Dr. M. Abbasi,
Thank you very much for your kindly reply. Your second method still can't simplify the express as I wanted if I put '/6/V' after Li.
Thanks, Tang Laoya
On Wednesday, November 21, 2012 5:58:45 PM UTC+8, Nasser M. Abbasi wrote: > On 11/21/2012 2:17 AM, Nasser M. Abbasi wrote: > > > On 11/21/2012 12:15 AM, Tang Laoya wrote: > > >> Dear all, > > >> > > >> I am trying to calculate the partial derivative by mathematica, I have the following commands: > > >> L1=a1+b1*x+c1*y; > > >> L2=a2+b2*x+c2*y; > > >> L3=a3+b3*x+c3*y; > > >> > > >> NN=L1*L2; > > >> > > >> DNx=D[NN,x]; > > >> > > >> I got the following result: > > >> DNex=b2 (a1+b1 x+c1 y)+b1 (a2+b2 x+c2 y) > > >> > > >> How to do to have the following result? > > >> > > >> DNex=b2*L1 + b1 * L2 > > >> > > > > > > > > > > The problem is that you did not use equations, but used expresions. > > > Hence in your case L1 is now 'a1+b1*x+c1*y' and similarly with L2. > > > > > > To do this right, I'd write things as equations, and use rules, like > > > this: > > > > > > -------------------------- > > > Clear[L1, L2, a1, b2, x, c1, y, a2, b2, c2, lhs, rhs] > > > eq1 = L1 == a1 + b1*x + c1*y; > > > eq2 = L2 == a2 + b2*x + c2*y; > > > lhs[eq_] := eq /. (lhs_ == rhs_) -> lhs; > > > rhs[eq_] := eq /. (lhs_ == rhs_) -> rhs; > > > > > > NN = rhs[eq1]*rhs[eq2]; > > > DNx = D[NN, x] > > > ---------------------------- > > > > > > which gives what you showed > > > > > > b2 (a1+b1 x+c1 y)+b1 (a2+b2 x+c2 y) > > > > > > Now it is easy to use the rules to get what you want > > > > > > ------------------ > > > DNx/.{rhs[eq1]->lhs[eq1],rhs[eq2]->lhs[eq2]} > > > --------------------- > > > > > > which gives > > > > > > b2 L1+b1 L2 > > > > > > > After thinking more about this, another way to do this, > > and to keep from having to write rhs[eq] and rhs[eq] all > > the time, which is not as nice looking as L1 and L2 etc.. > > and can be harder to read if there are many equations, is > > to use rules. > > > > Like this: > > > > ----------------------------- > > Clear["Global`*"]; > > > > rule1 = {L1 -> a1 + b1*x + c1*y, L2 -> a2 + b2*x + c2*y} > > rule2 = (Last[#] -> First[#]) & /@ rule1 > > NN = (L1*L2) /. rule1; > > DNx = D[NN, x] > > ----------------------- > > > > Which gives > > > > b2 (a1 + b1 x + c1 y) + b1 (a2 + b2 x + c2 y) > > > > Now to get back, use rule2 above, which is the reverse > > of rule1 > > > > ------------------------------- > > In[185]:= DNx/.rule2 > > Out[185]= b2 L1+b1 L2 > > ----------------------------- > > > > The advantage of this method again is that one used L1 and L2, > > instead of rhs[eq1], rhs[eq2] etc.. which is more clear. > > > > --Nasser
|
|