Search code examples
symbolic-mathwolfram-language

Defining the difference of compositions in the Wolfram Language


I've been trying to define a function compdiff on the Wolfram Language that takes two mathematical expressions f and g and a variable x as input and outputs the difference of their compositions f[g[x]]-g[f[x]] (a sort of commutator if you are into abstract algebra).

For example: compdiff[x^2,x+1,x] = (x+1)^2-(x^2+1).

I've tried with

compdiff[f_,g_,x_]:= Composition[f,g][x]-Composition[g,f][x]

and

compdiff[f_,g_,x_]:= f @* g @ x-g @* f @ x

but when I input

compdiff[x^2,x+1,x]

it outputs

(x^2)[(1 + x)[x]] - (1 + x)[(x^2)[x]]

What am I doing wrong?


Solution

  • You need to use functions instead of expressions. For example:

    f[x_] := x^2
    g[x_] := x+1
    

    Then compdiff[f, g, x] will work:

    In[398]:= compdiff[f,g,x]
    Out[398]= -1-x^2+(1+x)^2
    

    Alternatively, you could use pure functions, as in:

    In[399]:= compdiff[#^2&,#+1&,x]
    Out[399]= -1-x^2+(1+x)^2