Ogólny algorytm iloczynu jest podany np. tu https://en.wikipedia.org/wiki/Product_rule.
Zauważmy, że stosuje się to także do funkcji stałych (w projekcie Constant
):
ddx(2⋅f(x))=ddx(2)⋅f(x)+2⋅ddxf(x) =0⋅f(x)+2⋅ddxf(x)
Stąd najprostsza implementacja ma postać:
Node diffVanilla(Variable var) { Sum r = new Sum(); for(int i=0;i<args.size();i++){ Prod m= new Prod(); for(int j=0;j<args.size();j++){ Node f = args.get(j); if(j==i)m.mul(f.diff(var)); else m.mul(f); } r.add(m); } return r; }