/** * Create a complex numeric number with imaginary part = 0.0 * * @param r * the real part of the number * @return */ public static IComplexNum complexNum(final double r) { return complexNum(r, 0.0); }
@Override public IExpr e1ComplexArg(Complex arg1) { if (arg1.equals(Complex.ZERO)) { return F.complexNum(Complex.ONE); } return F.complexNum(arg1.sin().divide(arg1)); }
/** {@inheritDoc} */ @Override public IExpr evaluate(EvalEngine engine) { if (engine.isNumericMode()) { return F.complexNum(this); } final INumber cTemp = normalize(); if (cTemp == this) { return null; } return cTemp; }
@Override public IExpr e1DblArg(final double arg1) { double val = Math.asin(arg1); if (Double.isNaN(val)) { return F.complexNum(Complex.valueOf(arg1).asin()); } return F.num(val); }
@Override public IExpr e1DblComArg(IComplexNum arg1) { Apcomplex c = new Apcomplex(new Apfloat(new BigDecimal(arg1.getRealPart()), Config.MACHINE_PRECISION), new Apfloat(new BigDecimal(arg1.getImaginaryPart()), Config.MACHINE_PRECISION)); return F.complexNum(ApcomplexMath.w(c)); }
public static INumber jas2Numeric(org.hipparchus.complex.Complex c, double epsilon) { double red = c.getReal(); double imd = c.getImaginary(); return F.chopNumber(F.complexNum(red, imd), epsilon); }
@Override public IExpr e1DblArg(final INum d) { try { return F.num(ApfloatMath.w(new Apfloat(new BigDecimal(d.doubleValue()), Config.MACHINE_PRECISION))); } catch (Exception ce) { } return F.complexNum( ApcomplexMath.w(new Apfloat(new BigDecimal(d.doubleValue()), Config.MACHINE_PRECISION))); }
@Override public IExpr e1ComplexArg(final Complex arg1) { if (arg1.equals(Complex.ZERO)) { return F.CComplexInfinity; } return F.complexNum(Complex.ONE.divide(arg1).asin()); }
@Override public IExpr e1ComplexArg(final Complex arg1) { if (arg1.equals(Complex.ZERO)) { return F.CComplexInfinity; } return F.complexNum(Complex.ONE.divide(arg1).acos()); }
/** {@inheritDoc} */ @Override public INumber fractionalPart() { return F.complexNum(fApcomplex.real().frac(), fApcomplex.imag().frac()); }
@Override public IExpr e1ApfloatArg(Apfloat arg1) { try { return F.num(ApfloatMath.asin(arg1)); } catch (ArithmeticException ae) { return F.complexNum(ApcomplexMath.asin(new Apcomplex(arg1, Apcomplex.ZERO))); } }
@Override public IExpr e1ApcomplexArg(Apcomplex arg1) { if (arg1.equals(Apcomplex.ZERO)) { return F.num(Apcomplex.ONE); } return F.complexNum(ApcomplexMath.sin(arg1).divide(arg1)); }
public static IComplexNum complexNum(final IInteger value) { final EvalEngine engine = EvalEngine.get(); if (engine.isApfloat()) { return ApcomplexNum.valueOf(value.toBigNumerator(), BigInteger.ONE, BigInteger.ZERO, BigInteger.ONE, engine.getNumericPrecision()); } return complexNum(value.doubleValue(), 0.0d); }
public static IComplexNum complexNum(final IFraction value) { final EvalEngine engine = EvalEngine.get(); if (engine.isApfloat()) { return ApcomplexNum.valueOf(value.toBigNumerator(), value.toBigDenominator(), BigInteger.ZERO, BigInteger.ONE, engine.getNumericPrecision()); } return complexNum(value.doubleValue(), 0.0d); }
@Override public IExpr e1ComplexArg(final Complex z) { // 1/2 * Ln( (1+z) / (1-z) ) Complex temp = Complex.ONE.add(z).divide(Complex.ONE.subtract(z)).log(); return F.complexNum(new Complex(temp.getReal() / 2, temp.getImaginary() / 2)); }
@Override public IExpr e1ComplexArg(final Complex arg1) { double re = arg1.getReal(); double im = arg1.getImaginary(); Complex temp = new Complex(re * re - im * im - 1, 2 * re * im).sqrt(); return F.complexNum(new Complex(temp.getReal() + re, temp.getImaginary() + im).log()); }
@Override public IExpr e1ApcomplexArg(Apcomplex arg1) { // 1/arg1 Apcomplex c = ApcomplexMath.inverseRoot(arg1, 1); // (1/2) (Log(1 + 1/arg1) - Log(1 - 1/arg1)) Apcomplex result = ApcomplexMath.log(Apcomplex.ONE.add(c)) .subtract(ApcomplexMath.log(Apcomplex.ONE.subtract(c))).divide(new Apfloat(2)); return F.complexNum(result); }
@Override public IExpr e1ApcomplexArg(Apcomplex arg1) { // I/arg1 Apcomplex ac = Apcomplex.I.divide(arg1); // (I/2) (Log(1 - I/arg1) - Log(1 + I/arg1)) Apcomplex result = Apcomplex.I.divide(new Apfloat(2)).multiply( ApcomplexMath.log(Apcomplex.ONE.subtract(ac)).subtract(ApcomplexMath.log(Apcomplex.ONE.add(ac)))); return F.complexNum(result); }
public static INumber jas2Numeric(edu.jas.poly.Complex<BigRational> c, double epsilon) { IFraction re = F.fraction(c.getRe().numerator(), c.getRe().denominator()); double red = re.doubleValue(); IFraction im = F.fraction(c.getIm().numerator(), c.getIm().denominator()); double imd = im.doubleValue(); return F.chopNumber(F.complexNum(red, imd), epsilon); }
public static INumber jas2Numeric(edu.jas.poly.Complex<BigRational> c, double epsilon) { IFraction re = F.fraction(c.getRe().numerator(), c.getRe().denominator()); double red = re.doubleValue(); IFraction im = F.fraction(c.getIm().numerator(), c.getIm().denominator()); double imd = im.doubleValue(); if (F.isZero(imd, epsilon)) { return F.num(red); } return F.complexNum(red, imd); } }