Search in sources :

Example 21 with IComplex

use of org.matheclipse.core.interfaces.IComplex in project symja_android_library by axkr.

the class PolynomialHomogenization method replaceTimes.

private IExpr replaceTimes(final IAST ast, final IExpr base, IExpr exp) {
    IExpr first = exp.first();
    if (first.isComplex() && ((IComplex) first).reRational().isZero()) {
        IRational imPart = ((IComplex) first).imRational();
        int exponent = imPart.toIntDefault();
        if (exponent == Integer.MIN_VALUE) {
            return replaceExpression(ast).orElse(ast);
        } else if (exponent > 0) {
            IASTMutable restExponent = ((IAST) exp).setAtCopy(1, F.CI);
            return F.Power(replaceExpression(base.power(restExponent)), exponent);
        }
        return replaceExpression(ast);
    }
    int exponent = first.toIntDefault();
    if (exponent == Integer.MIN_VALUE) {
        return replaceExpression(ast);
    } else if (exponent > 0) {
        IExpr rest = exp.rest().oneIdentity1();
        return F.Power(replaceExpression(base.power(rest)), exponent);
    }
    return replaceExpression(ast).orElse(ast);
}
Also used : IComplex(org.matheclipse.core.interfaces.IComplex) IRational(org.matheclipse.core.interfaces.IRational) IExpr(org.matheclipse.core.interfaces.IExpr) IASTMutable(org.matheclipse.core.interfaces.IASTMutable)

Example 22 with IComplex

use of org.matheclipse.core.interfaces.IComplex in project symja_android_library by axkr.

the class PolynomialHomogenization method determineTimes.

private void determineTimes(final IAST ast, final IExpr base, IAST timesExponent) {
    IExpr first = timesExponent.first();
    if (first.isComplex() && ((IComplex) first).reRational().isZero()) {
        IRational pureImPart = ((IComplex) first).imRational();
        int exponent = pureImPart.toIntDefault();
        if (exponent == Integer.MIN_VALUE) {
            replaceExpressionLCM(ast, F.C1);
            return;
        } else if (exponent > 0) {
            IASTMutable restExponent = timesExponent.setAtCopy(1, F.CI);
            replaceExpressionLCM(base.power(restExponent), F.C1);
            return;
        }
        replaceExpressionLCM(ast, F.C1);
        return;
    }
    int exponent = first.toIntDefault();
    if (exponent == Integer.MIN_VALUE) {
        replaceExpressionLCM(ast, F.C1);
        return;
    } else if (exponent > 0) {
        IExpr rest = timesExponent.rest().oneIdentity1();
        replaceExpressionLCM(base.power(rest), F.C1);
        return;
    }
    replaceExpressionLCM(ast, F.C1);
}
Also used : IComplex(org.matheclipse.core.interfaces.IComplex) IRational(org.matheclipse.core.interfaces.IRational) IExpr(org.matheclipse.core.interfaces.IExpr) IASTMutable(org.matheclipse.core.interfaces.IASTMutable)

Aggregations

IComplex (org.matheclipse.core.interfaces.IComplex)22 IExpr (org.matheclipse.core.interfaces.IExpr)18 IAST (org.matheclipse.core.interfaces.IAST)13 ISymbol (org.matheclipse.core.interfaces.ISymbol)11 IComplexNum (org.matheclipse.core.interfaces.IComplexNum)10 IInteger (org.matheclipse.core.interfaces.IInteger)10 IFraction (org.matheclipse.core.interfaces.IFraction)9 INum (org.matheclipse.core.interfaces.INum)8 IRational (org.matheclipse.core.interfaces.IRational)6 IASTMutable (org.matheclipse.core.interfaces.IASTMutable)4 ISignedNumber (org.matheclipse.core.interfaces.ISignedNumber)4 ApcomplexNum (org.matheclipse.core.expression.ApcomplexNum)3 ApfloatNum (org.matheclipse.core.expression.ApfloatNum)3 JASConversionException (org.matheclipse.core.eval.exception.JASConversionException)2 ComplexNum (org.matheclipse.core.expression.ComplexNum)2 Num (org.matheclipse.core.expression.Num)2 INumber (org.matheclipse.core.interfaces.INumber)2 IPatternObject (org.matheclipse.core.interfaces.IPatternObject)2 InfixOperator (org.matheclipse.parser.client.operator.InfixOperator)2 Operator (org.matheclipse.parser.client.operator.Operator)2