Quadratic Solver

From CodeCodex

Revision as of 20:15, 21 February 2011 by 79.91.219.32 (Talk)

<highlightsyntax language="PHP"> // Quadratic Solver for PHP by Gazza 2004-03-21 // Useage: for 3x^2 + 4x + 5 = 0, use quadratic(3, 4, 5, 'root1') and quadratic(3, 4, 5, 'root2'), // or simply just quadratic(3, 4, 5, 'both'). // The $root argument doesn't define which value it will be in relation to the other - I could // easily have called them John and Jane, instead of 1st and 2nd. // function quadratic($a, $b, $c, $root) { $precision = 3; // Change this value for a different decimal places rounding.

$bsmfac = $b*$b-4*$a*$c; if ($bsmfac < 0) { // Accounts for complex roots. $plusminusone = " + "; $plusminustwo = " - "; $bsmfac *=-1; $complex=(sqrt($bsmfac)/(2*$a)); if ($a < 0){ //if negative imaginary term, tidies appearance. $plusminustwo = " + "; $plusminusone = " - "; $complex *= -1; } // End if ($a < 0) $lambdaone = round(-$b/(2*$a), $precision).$plusminusone.round($complex, $precision).'i'; $lambdatwo = round(-$b/(2*$a), $precision).$plusminustwo.round($complex, $precision).'i'; } // End if ($bsmfac < 0)

else if ($bsmfac == 0) { // Simplifies if b^2 = 4ac (real roots). $lambdaone = round(-$b/(2*$a), $precision); $lambdatwo = round(-$b/(2*$a), $precision); } // End else if (bsmfac == 0)

else { // Finds real roots when b^2 != 4ac. $lambdaone = (-$b+sqrt($bsmfac))/(2*$a); $lambdaone = round($lambdaone, $precision); $lambdatwo = (-$b-sqrt($bsmfac))/(2*$a); $lambdatwo = round($lambdatwo, $precision); } // End else

// Return what is asked for. if ($root == 'root1') {return $lambdaone;} if ($root == 'root2') {return $lambdatwo;} if ($root == 'both') {return $lambdaone. ' and ' .$lambdatwo;} } // End function </highlightsyntax>

Tcl

package require math::complexnumbers

proc quadratic {a b c} {
 set 2a [expr {$2*$a}]
 set delta [expr {$b**2 - 4*$a*$c}]
 set roots {}
 if {$delta < 0} {
   set x1 [expr {(-1.0*$b) / $2a}]
   set x2 [expr {sqrt(abs($delta)) / $2a}]
   lappend roots [tostring [complex $x1 $x2]] \
                 [tostring [complex $x1 [expr {-1 * $x2}]]]
 } elseif {$delta == 0} {
   lappend roots [expr {-1.0*$b / $2a)}]
 } else {
   lappend roots [expr {(-1*$b + sqrt($delta)) / $2a}] \
                 [expr {(-1*$b - sqrt($delta)) / $2a}]
 }
 return $roots
}