public static SymbolicVariable DiffBFunction(SymbolicVariable fv, string parameter) { var pa = fv.GetFunctionParameters()[0]; var ps = SymbolicVariable.Multiply(pa, pa); var func = fv.FunctionName; var dpa = pa.Differentiate(parameter); if (string.Equals(func, "asin", StringComparison.OrdinalIgnoreCase)) { //asin(x) → 1 / sqrt(1-x^2) return(SymbolicVariable.Parse(dpa.ToString() + "/sqrt(1-(" + ps.ToString() + "))")); } if (string.Equals(func, "acos", StringComparison.OrdinalIgnoreCase)) { return(SymbolicVariable.Parse("-" + dpa.ToString() + "/sqrt(1-(" + ps.ToString() + "))")); } if (string.Equals(func, "atan", StringComparison.OrdinalIgnoreCase)) { return(SymbolicVariable.Parse(dpa.ToString() + "/(" + ps.ToString() + "+1)")); } if (string.Equals(func, "acot", StringComparison.OrdinalIgnoreCase)) { return(SymbolicVariable.Parse("-" + dpa.ToString() + "/(" + ps.ToString() + "+1)")); } if (string.Equals(func, "asec", StringComparison.OrdinalIgnoreCase)) { return(SymbolicVariable.Parse(dpa.ToString() + "/(sqrt(1-1/(" + ps.ToString() + "))*" + ps.ToString() + ")")); } if (string.Equals(func, "acsc", StringComparison.OrdinalIgnoreCase)) { return(SymbolicVariable.Parse("-" + dpa.ToString() + "/(sqrt(1-1/(" + ps.ToString() + "))*" + ps.ToString() + ")")); } #region hyperbolic functions if (string.Equals(func, "asinh", StringComparison.OrdinalIgnoreCase)) { //asin(x) → 1 / sqrt(x^2+1) return(SymbolicVariable.Parse(dpa.ToString() + "/sqrt(" + ps.ToString() + "+1)")); } if (string.Equals(func, "acosh", StringComparison.OrdinalIgnoreCase)) { return(SymbolicVariable.Parse("-" + dpa.ToString() + "/sqrt(" + ps.ToString() + "-1)")); } if (string.Equals(func, "atanh", StringComparison.OrdinalIgnoreCase)) { return(SymbolicVariable.Parse(dpa.ToString() + "/(1-(" + ps.ToString() + "))")); } if (string.Equals(func, "acoth", StringComparison.OrdinalIgnoreCase)) { return(SymbolicVariable.Parse("-" + dpa.ToString() + "/(" + ps.ToString() + "-1)")); } if (string.Equals(func, "asech", StringComparison.OrdinalIgnoreCase)) { return(SymbolicVariable.Parse("-" + dpa.ToString() + "/(sqrt(1/" + ps.ToString() + "-1)*" + ps.ToString() + ")")); } if (string.Equals(func, "acsch", StringComparison.OrdinalIgnoreCase)) { return(SymbolicVariable.Parse("-" + dpa.ToString() + "/(sqrt(1/" + ps.ToString() + "+1)*" + ps.ToString() + ")")); } #endregion throw new SymbolicException(fv.FunctionName + " differentiation not implemented yet"); }