function testAsinReal() { /*{{{*/ $tmp = Math_ComplexOp::asinReal(-0.22); $this->assertEquals('-0.221814470497 + 0i', $tmp->toString()); }
/** * Calculates the inverse sine of a complex number: z = asinAlt(c1) * Uses an alternative algorithm * * @param Math_Complex $c1 * @return Math_Complex A valid Math_Complex number on success * @throws InvalidArgumentException */ public static function asinAlt(Math_Complex $c1) { if (!Math_ComplexOp::isComplex($c1)) { throw new InvalidArgumentException('argument is not a Math_Complex object'); } $r = $c1->getReal(); $i = $c1->getIm(); if ($i == 0) { return Math_ComplexOp::asinReal($r); } else { $x = abs($r); $y = abs($i); $r = hypot($x + 1, $y); $s = hypot($x - 1, $y); $a = ($r + $s) / 2; $b = $x / $a; $y2 = $y * $y; $ac = 1.5; $bc = 0.6417; // crossover values if ($b <= $bc) { $real = asin($b); } else { if ($x <= 1) { $d = 0.5 * ($a + $x) * ($y2 / ($r + $x + 1) + ($s + (1 - $x))); $real = atan2($x, sqrt($d)); } else { $ax = $a + $x; $d = 0.5 * ($ax / ($r + $x + 1) + $ax / ($s + ($x - 1))); $real = atan2($x, $y * sqrt($d)); } } if ($a <= $ac) { if ($x < 1) { $m = 0.5 * ($y2 / ($r + ($x + 1)) + $y2 / ($s + (1 - $x))); } else { $m = 0.5 * ($y2 / ($r + ($x + 1)) + ($s + ($x - 1))); } $im = log1p($m + sqrt($m * ($a + 1))); } else { $im = log($a + sqrt($a * $a - 1)); } $real = $r >= 0 ? $real : -1 * $real; $im = $i >= 0 ? $im : -1 * $im; return new Math_Complex($real, $im); } }
echo "sin(a) = " . $z->toString() . "\n"; $z = Math_ComplexOp::cos($a); echo "cos(a) = " . $z->toString() . "\n"; $z = Math_ComplexOp::tan($a); echo "tan(a) = " . $z->toString() . "\n"; $z = Math_ComplexOp::sec($a); echo "sec(a) = " . $z->toString() . "\n"; $z = Math_ComplexOp::csc($a); echo "csc(a) = " . $z->toString() . "\n"; $z = Math_ComplexOp::cot($a); echo "cot(a) = " . $z->toString() . "\n"; $z = Math_ComplexOp::asin($a); echo "asin(a) = " . $z->toString() . "\n"; $z = Math_ComplexOp::asinAlt($a); echo "asinAlt(a) = " . $z->toString() . "\n"; $z = Math_ComplexOp::asinReal(-0.22); echo "asinReal(a) = " . $z->toString() . "\n"; $z = Math_ComplexOp::acos($a); echo "acos(a) = " . $z->toString() . "\n"; $z = Math_ComplexOp::atan($a); echo "atan(a) = " . $z->toString() . "\n"; $z = Math_ComplexOp::asec($a); echo "asec(a) = " . $z->toString() . "\n"; $z = Math_ComplexOp::acsc($a); echo "acsc(a) = " . $z->toString() . "\n"; $z = Math_ComplexOp::acot($a); echo "acot(a) = " . $z->toString() . "\n"; $z = Math_ComplexOp::sinh($a); echo "sinh(a) = " . $z->toString() . "\n"; $z = Math_ComplexOp::cosh($a); echo "cosh(a) = " . $z->toString() . "\n";