예제 #1
0
파일: Complex.java 프로젝트: baojie/indus
  public Complex acos() {
    Complex result;
    double tempRe, tempIm;

    //  acos(z)  =  -i * log( z + i * sqrt(1 - z*z) )

    tempRe = 1.0 - ((re * re) - (im * im));
    tempIm = 0.0 - ((re * im) + (im * re));

    result = new Complex(tempRe, tempIm);
    result = result.sqrt();

    tempRe = -result.im;
    tempIm = result.re;

    result.re = re + tempRe;
    result.im = im + tempIm;

    tempRe = Math.log(result.abs());
    tempIm = result.arg();

    result.re = tempIm;
    result.im = -tempRe;

    return result;
  }
예제 #2
0
 public void testSqrtInf() {
   TestUtils.assertSame(infNaN, oneInf.sqrt());
   TestUtils.assertSame(infNaN, oneNegInf.sqrt());
   TestUtils.assertSame(infZero, infOne.sqrt());
   TestUtils.assertSame(zeroInf, negInfOne.sqrt());
   TestUtils.assertSame(infNaN, infInf.sqrt());
   TestUtils.assertSame(infNaN, infNegInf.sqrt());
   TestUtils.assertSame(nanInf, negInfInf.sqrt());
   TestUtils.assertSame(nanNegInf, negInfNegInf.sqrt());
 }
예제 #3
0
 public void testSqrtPolar() {
   double r = 1;
   for (int i = 0; i < 5; i++) {
     r += i;
     double theta = 0;
     for (int j = 0; j < 11; j++) {
       theta += pi / 12;
       Complex z = ComplexUtils.polar2Complex(r, theta);
       Complex sqrtz = ComplexUtils.polar2Complex(Math.sqrt(r), theta / 2);
       TestUtils.assertEquals(sqrtz, z.sqrt(), 10e-12);
     }
   }
 }
예제 #4
0
파일: Complex.java 프로젝트: baojie/indus
  public Complex asinh() {
    Complex result;
    //  asinh(z)  =  log(z + sqrt(z*z + 1))

    result = new Complex(((re * re) - (im * im)) + 1, (re * im) + (im * re));

    result = result.sqrt();

    result.re += re;
    result.im += im;

    double temp = result.arg();
    result.re = Math.log(result.abs());
    result.im = temp;

    return result;
  }
예제 #5
0
파일: Complex.java 프로젝트: baojie/indus
  public Complex asin() {
    Complex result;
    double tempRe, tempIm;

    //  asin(z)  =  -i * log(i*z + sqrt(1 - z*z))

    tempRe = 1.0 - ((re * re) - (im * im));
    tempIm = 0.0 - ((re * im) + (im * re));

    result = new Complex(tempRe, tempIm);
    result = result.sqrt();

    result.re += -im;
    result.im += re;

    tempRe = Math.log(result.abs());
    tempIm = result.arg();

    result.re = tempIm;
    result.im = -tempRe;

    return result;
  }
예제 #6
0
 public void testSqrtImaginaryNegative() {
   Complex z = new Complex(-3.0, -4.0);
   Complex expected = new Complex(1.0, -2.0);
   TestUtils.assertEquals(expected, z.sqrt(), 1.0e-5);
 }
예제 #7
0
 public void testSqrtImaginaryZero() {
   Complex z = new Complex(-3.0, 0.0);
   Complex expected = new Complex(0.0, 1.73205);
   TestUtils.assertEquals(expected, z.sqrt(), 1.0e-5);
 }
예제 #8
0
 public void testSqrtRealNegative() {
   Complex z = new Complex(-3.0, 4);
   Complex expected = new Complex(1, 2);
   TestUtils.assertEquals(expected, z.sqrt(), 1.0e-5);
 }
예제 #9
0
 public void testSqrtRealZero() {
   Complex z = new Complex(0.0, 4);
   Complex expected = new Complex(1.41421, 1.41421);
   TestUtils.assertEquals(expected, z.sqrt(), 1.0e-5);
 }
예제 #10
0
 public void testSqrtRealPositive() {
   Complex z = new Complex(3, 4);
   Complex expected = new Complex(2, 1);
   TestUtils.assertEquals(expected, z.sqrt(), 1.0e-5);
 }