# Lists of coefficients of derivatives

I want to extract two separate lists of coefficients of derivatives. If I have, for example,

cl= A1*D[P[x, y], {x, 1}] + A2*D[P[x, y], {x, 2}] +
A3*D[Q[x, y], {y, 3}] + A4*D[Q[x, y], {y, 1}];


I want to extract the lists {A1, A2} and {A3, A4} but do not want to type all the derivative expressions into command CoefficientList. I want to extract these lists programmatically because of I have a very long list of derivatives in my actual problem, which I thought was too long to post here.

The following seems to work, but how can I do it without typing in the list of derivatives?

Coefficient[cl, {D[P[x, y], {x, 1}], D[P[x, y], {x, 2}]}]
Coefficient[cl, {D[Q[x, y], {y, 3}], D[Q[x, y], {y, 1}]}]


Longer example

 cl2=B1*Derivative[0, 1, 0][R][x, y, z] +
B2*Derivative[2, 0, 0][R][x, y, z] +
B4*Derivative[2, 1, 3][V][x, y, z] +
B3*Derivative[3, 2, 1][R][x, y, z] + B5*Derivative[4, 1, 5][V][x, y, z] + B0*V[x, y, z]  + B00*R[x, y, z];


I need list of coefficients and list of derivatives parallel to know for which derivative is appropriate coefficient. But if I have zero derivatives, they don't appear in the list?

• @Nasser It is managed now. Please try it, I think it is working, but how to do that without typing for which derivatives I want coefficient in front. I need it all. For example CoefficientList[cl,derivatives]?? – Pipe Dec 14 '12 at 13:53
• Use Cases to extract the set(s) of variables of interest. Coefficient[cl, Cases[Variables[cl], HoldPattern[Derivative[__][P][__]]]] Out: {A1, A2} – Daniel Lichtblau Dec 14 '12 at 15:08
• @Daniel Thank you Daniel – Pipe Dec 14 '12 at 23:42
• I see you updated your question again. In the future please try your best to communicate what you need from the beginning so that it does not take as many cycles to get there. Does this perform as you desire? Reap[Cases[cl3, coef_*d : Derivative[__][_][__] :> Sow[coef, d], 1], _, {#, Total@#2} &][] – Mr.Wizard Dec 17 '12 at 12:02

Also borrowing from Daniel's comment, perhaps you would like:

cl = A1*D[P[x, y], {x, 1}] + A2*D[P[x, y], {x, 2}] +
A3*D[Q[x, y], {y, 3}] + A4*D[Q[x, y], {y, 1}];

Cases[cl, coef_ * Derivative[__][x_][__] :> {x, coef}, 1];

{#[[1, 1]], #[[All, 2]]} & /@ GatherBy[%, First]

{{Q, {A4, A3}}, {P, {A1, A2}}}


Or somewhat less transparently as a one-liner:

Reap[Cases[cl, coef_*Derivative[__][x_][__] :> Sow[coef, x], 1], _, List][]

{{Q, {A4, A3}}, {P, {A1, A2}}}


Based on the comments below I believe you may use:

Reap[Cases[cl2, coef_ * d : Derivative[__][_][__] :> Sow[coef, d], 1], _, List][] • thank you for your attention but how to know which coefficient is with which derivative? If I will have partial derivatives, I need list of derivatives and list of coefficients parallel to know how to pair them. – Pipe Dec 14 '12 at 23:29
• @Pipe please give me a longer example of desired input and output. – Mr.Wizard Dec 15 '12 at 0:15
• @ longer example is in input question – Pipe Dec 15 '12 at 11:17
• @Pipe Thanks, but what output do you desire? It's still not clear to me what information you need to extract and how you want them grouped. – Mr.Wizard Dec 15 '12 at 19:34
• @Wizard I want all derivatives and all appropriate coefficients. To know order with which derivative is which coefficient – Pipe Dec 15 '12 at 20:36

Turning Daniel's comment into an answer:

This is working, but how to do that not to type list of derivatives

You can do this by extracting the list you are currently type automatically. In the first list, you want all derivates wrt P. If you look at the FullForm you instantly see how such a derivative is represented internally

D[P[x,y],{x,2}]//FullForm

(* Derivative[2,0][P][x,y] *)


Important for you is only the P inside this form. Therefore, you create a pattern where everything else can be anything. This is done with Blank (_) or BlankSequence (__). For the extraction you use Cases

Cases[cl, Derivative[__][P][__], Infinity]

(* {(P^(1,0))[x,y],(P^(2,0))[x,y]} *)


This list can now be used inside Coefficient

Coefficient[cl, Cases[cl,Derivative[__][P][__],Infinity]]
(* {A1,A2} *)


deqCoeffitient[deq_, var_Symbol] :=