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;
}
}