function pleac_Using_Complex_Numbers() { // PHP offers no native support for complex numbers. However, a 'Math_Complex' class // is available for download from PEAR: [http://pear.php.net/package/Math_Complex]. // Note the following 'include' directives are required: // // include_once('Math/Complex.php'); // include_once('Math/TrigOp.php'); // include_once('Math/ComplexOp.php'); $a = new Math_Complex(3, 5); $b = new Math_Complex(2, -2); $c = Math_ComplexOp::mult($a, $b); echo $c->toString() . "\n"; // ---------------------------- $d = new Math_Complex(3, 4); $r = Math_ComplexOp::sqrt($d); echo $r->toString() . "\n"; }
/** * Returns the exponentiation of a complex numbers to a real power: z = c1^(real) * * @param Math_Complex $c1 * @param float $real * @return Math_Complex A valid Math_Complex number on success * @throws InvalidArgumentException */ public static function powReal(Math_Complex $c1, $real) { if (!Math_ComplexOp::isComplex($c1)) { throw new InvalidArgumentException('First arguments must be Math_Complex object'); } elseif (!is_numeric($real)) { throw new InvalidArgumentException("An real number is needed as second parameter"); } else { $ar = $c1->getReal(); $ai = $c1->getIm(); if ($ar == 0 && $ai == 0) { $r = $i = 0.0; } else { $logr = log($c1->abs()); $theta = $c1->arg(); $rho = exp($logr * $real); $beta = $theta * $real; $r = $rho * cos($beta); $i = $rho * sin($beta); } return new Math_Complex($r, $i); } }
function testPowReal() { /*{{{*/ $tmp = Math_ComplexOp::powReal($this->cnum1, M_E); $this->assertEquals('-0.217519902849 + 0.0771254874156i', $tmp->toString()); }
if (!Math_ComplexOp::areEqual($a, $b)) { echo "a != b\n"; } $z = Math_ComplexOp::add($a, $b); echo "add(a, b) = " . $z->toString() . "\n"; $z = Math_ComplexOp::sub($a, $b); echo "sub(a,b) = a - b = " . $z->toString() . "\n"; $t = Math_ComplexOp::sub($b, $a); echo "b - a: " . $t->toString() . "\n"; $t = Math_ComplexOp::sub($b, Math_ComplexOp::conjugate($a)); echo "b - a': " . $t->toString() . "\n"; $v = Math_ComplexOp::conjugate($b); $t = Math_ComplexOp::sub($v, $a); echo "b' - a: " . $t->toString() . "\n"; $v = Math_ComplexOp::conjugate($b); $t = Math_ComplexOp::sub($v, Math_ComplexOp::conjugate($a)); echo "b' - a': " . $t->toString() . "\n"; $z = Math_ComplexOp::mult($a, $b); echo "mult(a, b) = " . $z->toString() . "\n"; $z = Math_ComplexOp::div($a, $b); echo "div(a, b) = " . $z->toString() . "\n"; $z = Math_ComplexOp::pow($a, $b); echo "pow(a, b) = " . $z->toString() . "\n"; $z = Math_ComplexOp::logBase($a, $b); echo "logBase(a, b) = " . $z->toString() . "\n"; $z = Math_ComplexOp::multReal($a, M_PI); echo "multReal(a, M_PI) = " . $z->toString() . "\n"; $z = Math_ComplexOp::multIm($a, $im); echo "multIm(a, i) = " . $z->toString() . "\n"; $z = Math_ComplexOp::powReal($a, M_E); echo "powReal(a, M_E) = " . $z->toString() . "\n";