public Generic antiDerivative(@Nonnull Variable variable) throws NotIntegrableException { final int parameter = getParameterForAntiDerivation(variable); if (parameter < 0) { throw new NotIntegrableException(this); } else { return antiDerivative(parameter); } }
@Override public void copy(@Nonnull MathEntity mathEntity) { super.copy(mathEntity); if (mathEntity instanceof CustomFunction) { final CustomFunction that = (CustomFunction) mathEntity; this.content = that.content; this.parameterNames = new ArrayList<String>(that.parameterNames); this.description = that.description; } }
@Nonnull @Override protected String formatUndefinedParameter(int i) { if (i < this.parameterNames.size()) { return parameterNames.get(i); } else { return super.formatUndefinedParameter(i); } }
public Function parse(@Nonnull Parameters p, Generic previousSumElement) throws ParseException { int pos0 = p.getPosition().intValue(); final String name = Identifier.parser.parse(p, previousSumElement); if (!valid(name)) { ParserUtils.throwParseException(p, pos0, Messages.msg_13); } final Function result = functionsRegistry.get(name); if (result != null) { final Generic parameters[] = ParserUtils.parseWithRollback(new ParameterListParser(result.getMinParameters()), pos0, previousSumElement, p); if (result.getMinParameters() <= parameters.length && result.getMaxParameters() >= parameters.length) { result.setParameters(parameters); } else { ParserUtils.throwParseException(p, pos0, Messages.msg_14, parameters.length); } } else { ParserUtils.throwParseException(p, pos0, Messages.msg_13); } return result; }
@Nonnull public Generic derivative(@Nonnull Variable variable) { if (isIdentity(variable)) { return JsclInteger.valueOf(1); } else { Generic result = JsclInteger.valueOf(0); for (int i = 0; i < parameters.length; i++) { // chain rule: f(x) = g(h(x)) => f'(x) = g'(h(x)) * h'(x) // hd = h'(x) // gd = g'(x) final Generic hd = parameters[i].derivative(variable); final Generic gd = this.derivative(i); result = result.add(hd.multiply(gd)); } return result; } }
final String functionName = mathTypeBefore.getMatch(); final Function function = Locator.getInstance().getEngine().getFunctionsRegistry().get(functionName); if (function == null || function.getMinParameters() > 0) { throw new CalculatorParseException(i, s, new CalculatorMessage(CalculatorMessages.msg_005, MessageType.error, mathTypeBefore.getMatch()));
@Override public boolean isInCategory(@Nonnull Function function) { return names.contains(function.getName()); } },
@Override public boolean isInCategory(@Nonnull Function function) { return !function.isSystem(); } },
public boolean isConstant(Variable variable) { boolean result = !isIdentity(variable); if (result) { for (Generic parameter : parameters) { if (!parameter.isConstant(variable)) { result = false; break; } } } return result; } }
Locator.getInstance().getKeyboard().buttonPressed(function.getName()); break;