Kvadratická rovnice o jedné neznámé je algebraická rovnice druhého řádu ve tvaru , kde a, b, c jsou reálné koeficienty. Kvadratická rovnice má v oboru reálných čísel 0, 1 nebo 2 řešení. Za předpokladu, že je koeficient a nulový, hovoříme o lineární rovnici.
Kvadratická funkce je vždy popsána parabolou. Za předpokladu, že je a kladné, pak je parabola konvexní, v opačném případě je konkávní.
Řešení
Nejprve spočítáme diskriminant, dle vzorce
Pokud je diskriminant záporný, pak rovnice nemá řešení v oboru reálných čísel.
Pokud je diskriminant nulový, pak má rovnice právě jedno dvojnásobné řešení:
Pokud je diskriminant kladný, pak má rovnice dvě různá řešení:
Příklad
Zjistěte kořeny rovnice .
Nejprve vypočítáme diskriminant:
Diskriminant je kladný, rovnice má dvě řešení v oboru reálných čísel.
Kód
/** * Resi kvadratickou rovnici o jedne nezname ve tvaru * ax^2 + bx + c = 0 * @param a * @param b * @param c * @return pole realnych korenu, null - pokud nema rovnice reseni v oboru * realnych cisel */ public static double[] solveQuadraticEquation(double a, double b, double c) { double d = b*b - 4*a*c; //diskriminant if(d < 0) { return null; } else if (d == 0) { double[] result = {-b/2*a}; return result; } else { double[] result = {(-b + Math.sqrt(d))/(2*a), (-b - Math.sqrt(d))/(2*a)}; return result; } }
/** * Resi kvadratickou rovnici o jedne nezname ve tvaru * ax^2 + bx + c = 0 * @param a * @param b * @param c * @return pole realnych korenu, null - pokud nema rovnice reseni v oboru * realnych cisel */ public static double[] SolveQuadraticEquation(double a, double b, double c) { double d = b * b - 4 * a * c; //diskriminant if (d < 0) { return null; } else if (d == 0) { double[] result = { -b / 2 * a }; return result; } else { double[] result = { (-b + Math.Sqrt(d)) / (2 * a), (-b - Math.Sqrt(d)) / (2 * a) }; return result; } }
/** Autor: Vaclav Kejr */ public Complex[] Kvadraticka(double[] polynom) { try { // Výpočet kvadratické rovnice. Complex koren1 = new Complex(); Complex koren2 = new Complex(); Complex[] koreny = new Complex[2]; double real1 = 0.0; double real2 = 0.0; double imag1 = 0.0; double imag2 = 0.0; double disc = 0.0; const double epsilon = 1E-14; if (Math.Abs(polynom[1]) > epsilon && Math.Abs(polynom[2]) > epsilon) { disc = Math.Pow(polynom[1], 2) - 4.0 * polynom[0] * polynom[2]; if (disc > 0 && disc > epsilon) { real1 = (-polynom[1] + Math.Sqrt(disc)) / (2.0 * polynom[0]); real2 = (-polynom[1] - Math.Sqrt(disc)) / (2.0 * polynom[0]); imag1 = 0.0; imag2 = imag1; koren1 = new Complex(real1, imag1); koren2 = new Complex(real2, imag2); } else if (disc < 0 && Math.Abs(disc) > epsilon) { // Reálná část komplexně sdruženého kořene. real1 = -polynom[1] / (2.0 * polynom[0]); real2 = -polynom[1] / (2.0 * polynom[0]); // Imaginární část komplexně sdruženého kořene. imag1 = Math.Sqrt(Math.Abs(disc)) / (2.0 * polynom[0]); imag2 = -Math.Sqrt(Math.Abs(disc)) / (2.0 * polynom[0]); koren1 = new Complex(real1, imag1); koren2 = new Complex(real2, imag2); } else if (disc > 0 && disc <= epsilon) { real1 = -polynom[1] / (2.0 * polynom[0]); real2 = real1; imag1 = 0.0; imag2 = imag1; koren1 = new Complex(real1, imag1); koren2 = new Complex(real2, imag2); } else if (disc < 0 && Math.Abs(disc) <= epsilon) { real1 = 0.0; real2 = real1; imag1 = -polynom[1] / (2.0 * polynom[0]); imag2 = imag1; koren1 = new Complex(real1, imag1); koren2 = new Complex(real2, imag2); } } else { throw new ArgumentException("Koeficienty polynomu jsou příliš malé !", polynom[1].ToString()); } koreny[0] = koren1; koreny[1] = koren2; return koreny; } catch (Exception ex) { Console.WriteLine(ex.ToString()); Complex[] koreny = new Complex[2]; return koreny; } }
/** * Kvadraticka rovnice o jedne nezname ve tvaru ax^2 + bx + c = 0 * @param $a * @param $b * @param $c * @return pole realnych korenu, NULL - pokud nema rovnice reseni v oboru realnych cisel * @author Thomas (www.adamjak.net) */ function solve_quadratic_equation($a, $b, $c){ $d = $b*$b - 4*$a*$c; //diskriminant if($d < 0) { return NULL; } else if ($d == 0){ $result = (-$b/2*$a); return $result; } else { $result = ((-$b + sqrt($d))/(2*$a) . (-$b - sqrt($d))/(2*$a)); return $result; } }