Computation of dparx(x)
> dparx1:=collect(subs(d(y)=0,df),p);
The next three steps are a bit of 'sleight of hand' to get Maple to remove the appropriate terms... namely those with a p in the numerator, and no p's in the denominator.
> dparxromeo:=simplify(p*dparx1);
> dparxlist:=convert(dparxromeo,list);
> dparxjuliet:=remove(has,dparxlist,{p^2,p^3,p^4});
> dparx2:=convert(dparxjuliet,`+`)/p;
Now we simplify dparx2, set it equal to zero, and solve for d(x). Something which is now easily done since dparx2 is linear in d(x).
> dparxx:=solve(dparx2=0,d(x));
And we are done.... the next section we repeat this for dpary.
>