@Override public IExpr evaluateArg1(final IExpr arg1) { if (isNegativeExpression(arg1)) { return Cosh(Times(CN1, arg1)); } return null; }
@Override public IExpr evaluateArg1(final IExpr arg1) { IExpr negExpr = AbstractFunctionEvaluator.getNormalizedNegativeExpression(arg1); if (negExpr.isPresent()) { return Cosh(negExpr); } IExpr imPart = AbstractFunctionEvaluator.getPureImaginaryPart(arg1); if (imPart.isPresent()) { return F.Cos(imPart); } if (arg1.isZero()) { return F.C1; } return F.NIL; }
/** * <code>Cosh(a+b+c+...)</code> * * @param plusAST * @param startPosition * @return */ private static IExpr expandCoshPlus(IAST plusAST, int startPosition) { IASTAppendable result = F.PlusAlloc(2); IExpr lhs = plusAST.get(startPosition); if (startPosition == plusAST.size() - 2) { // Cosh(x)*Cosh(y) + Sinh(x)*Sinh(y) IExpr rhs = plusAST.get(startPosition + 1); result.append(Times(F.Cosh(lhs), F.Cosh(rhs))); result.append(Times(F.Sinh(lhs), F.Sinh(rhs))); } else { result.append(Times(F.Cosh(lhs), expandCoshPlus(plusAST, startPosition + 1))); result.append(Times(F.Sinh(lhs), expandSinhPlus(plusAST, startPosition + 1))); } return result; }
/** * <code>Sinh(a+b+c+...)</code> * * @param plusAST * @param startPosition * @return */ private static IExpr expandSinhPlus(IAST plusAST, int startPosition) { IASTAppendable result = F.PlusAlloc(2); IExpr lhs = plusAST.get(startPosition); if (startPosition == plusAST.size() - 2) { // Sinh(x)*Cosh(y) + Cosh(x)*Sinh(y) IExpr rhs = plusAST.get(startPosition + 1); result.append(Times(F.Sinh(lhs), F.Cosh(rhs))); result.append(Times(F.Cosh(lhs), F.Sinh(rhs))); } else { result.append(Times(F.Sinh(lhs), expandCoshPlus(plusAST, startPosition + 1))); result.append(Times(F.Cosh(lhs), expandSinhPlus(plusAST, startPosition + 1))); } return result; }
return Plus(Times(Cos(reX), Cosh(imX)), Times(CI, Sin(reX), Sinh(imX))); Power(Plus(Cos(Times(C2, reX)), Negate(Cosh(Times(C2, imX)))), CN1)), Times(CI, Sinh(Times(C2, imX)), Power(Plus(Cos(Times(C2, reX)), Negate(Cosh(Times(C2, imX)))), CN1))); Times(integer(-2L), Cosh(imX), Sin(reX), Power(Plus(Cos(Times(C2, reX)), Times(CN1, Cosh(Times(C2, imX)))), CN1)), Times(C2, CI, Cos(reX), Sinh(imX), Power(Plus(Cos(Times(C2, reX)), Times(CN1, Cosh(Times(C2, imX)))), CN1))); return Plus(Times(C2, Cos(reX), Cosh(imX), Power(Plus(Cos(Times(C2, reX)), Cosh(Times(C2, imX))), CN1)), Times(C2, CI, Sin(reX), Sinh(imX), Power(Plus(Cos(Times(C2, reX)), Cosh(Times(C2, imX))), CN1))); return Plus(Times(Cosh(imX), Sin(reX)), Times(CI, Sinh(imX), Cos(reX))); return Plus(Times(Sin(Times(C2, reX)), Power(Plus(Cos(Times(C2, reX)), Cosh(Times(C2, imX))), CN1)), Times(CI, Sinh(Times(C2, imX)), Power(Plus(Cos(Times(C2, reX)), Cosh(Times(C2, imX))), CN1)));
/** * Exponential definitions for trigonometric functions * * See <a href= "http://en.wikipedia.org/wiki/List_of_trigonometric_identities#Exponential_definitions"> List of * trigonometric identities - Exponential definitions</a>,<br/> * <a href="http://en.wikipedia.org/wiki/Hyperbolic_function">Hyperbolic function</a> */ @Override public IExpr evaluate(final IAST ast, EvalEngine engine) { if (ast.size() == 2) { IExpr temp = Structure.threadLogicEquationOperators(ast.arg1(), ast, 1); if (temp.isPresent()) { return temp; } IExpr arg1 = ast.arg1(); temp = arg1.replaceAll(x -> { if (x.isPower() && x.base().equals(F.E)) { IExpr exponent = x.exponent(); return F.Plus(F.Cosh(exponent), F.Sinh(exponent)); } return F.NIL; }); if (temp.isPresent()) { return F.evalExpandAll(temp, engine); } return arg1; } Validate.checkSize(ast, 2); return F.NIL; }
return F.Cosh(imPart);
F.Condition(F.Times(F.Power(F.Csch(F.x), F.Plus(F.m, F.n)), F.Power(F.Cosh(F.x), F.n)), F.And(F.Not(F.NumberQ(F.m)), F.IntegerQ(F.n), F.Greater(F.n, F.C0))))); TIMES_ORDERLESS_MATCHER.defineHashRule(new HashedPatternRulesTimesPower(// F.Cosh(x_), // F.Cosh(x))); TIMES_ORDERLESS_MATCHER.defineHashRule(new HashedPatternRulesTimes(// F.Cosh(x_), // F.C1)); super.setUp(newSymbol);
ORDERLESS_MATCHER.defineHashRule(Sinh(x_), Cosh(y_), Plus(Times(C1D2, Sinh(Plus(x, Times(CN1, y)))), Times(C1D2, Sinh(Plus(x, y)))));