Question: How to differentiate w.r.t expression?

I'd like to differentiate  3*(r/sqrt(a))+ (r/sqrt(a))^2  w.r.t  r/sqrt(a) and obtain

    3 + 2* (r/sqrt(a))

in otherwords, treat (r/sqrt(a)) as a single variable. This is what I tried:

restart;
v:=r/sqrt(a);    #the single expression to differentiate w.r.t
p:=x->x^2+3*x;
expr:=Diff(p(v),v);
algsubs(v=x,expr);
algsubs(x=v,value(%));

The problem is that when doing x^2 and x is r/sqrt(a), then it become r^2/a and it does not remain (r/sqrt(a))^2, so now the algsubs does not "see" it. I get as final answer

ofcourse, one can now try to simplify the above to the required form, maybe using assumptions or by dividing by sqrt(a) the numerator and denominator of the first term above to get  3+2*(r/sqrt(a)) but this is all requires extra work and can be hard depending on the result.

is there a better way to do the above so it works in general? The problem is in the function p, I need a way to tell Maple now to simplify it somehow. In Mathematica, I can do this like this:

Clear[p, x, r, a]
p[x_] := x^2 + 3*x;
v = r/Sqrt[a];
With[{v = x}, Inactive[D][p[v], v]];
Activate[%];
% /. x -> v

 

 

Please Wait...