public SymbolFunction D(int index = 0) { var f = new SymbolFunction(this, Arguments); f.Derivatives[index]++; return(f); }
public SymbolFunction(SymbolFunction f, params Expression[] args) : base(args) { this.name = f.Name; if (args.Length <= f.Derivatives.Length) { Derivatives = f.Derivatives.Take(args.Length).ToArray(); } else { Derivatives = f.Derivatives .Concat(new int[args.Length - f.Derivatives.Length]) .ToArray(); } var lastD = Array.FindLastIndex(Derivatives, d => d != 0); if (lastD >= args.Length) { throw new ArgumentException(); } }