Example #1
0
/*
 *    This routine solves a quadratic equation:
 *    0 = a0 + a1.x + a2.x^2
 *    placing the (complex) roots in r1 and r2.
 */
void quad_complex( dcomplex a0, dcomplex a1, dcomplex a2, dcomplex *r1, dcomplex *r2 ) {

    double sign;
    dcomplex d, q;

    d = sub_dc( mul_dc( a1, a1 ), rmul_dc( 4.0, mul_dc( a2, a0) ) );

    sign = mul_dc( conj_dc(a1), d ).r > 0.0 ? +1.0 : -1.0;
    q = rmul_dc( -0.5, add_dc( a1, rmul_dc( sign, sqrt_dc( d ) ) ) );
    *r1 = div_dc( q, a2);
    *r2 = div_dc( a0, q);

    return;
}
Example #2
0
void wairy( double x, dcomplex *w1, dcomplex *w2, dcomplex *w1p, dcomplex *w2p ) {
    double factor = SQRTPI;
    double ai, bi, aip, bip;

    airy( x, &ai, &bi, &aip, &bip );
    *w1 = mk_dc( ai, bi );
    *w1 = rmul_dc( factor, *w1 );

    *w2 = mk_dc( ai, -bi );
    *w2 = rmul_dc( factor, *w2 );

    *w1p = mk_dc( aip, bip );
    *w1p = rmul_dc( factor, *w1p );

    *w2p = mk_dc( aip, -bip );
    *w2p = rmul_dc( factor, *w2p );

}