Výpočet riešenie kvadratickej rovnice
V minulej lekcii, LU rozklad, vlastné čísla a definitnost matíc , sme sa naučili robiť LU rozklad, ukázali si jeho aplikácie a dozvedeli sa, čo sú to vlastné čísla a definitnost matíc.
Budeme riešiť kvadratickú rovnicu tvaru ax 2 + bx + c = 0 v obore reálnych čísel pomocou diskriminant.
Najskôr zadáme z klávesnice koeficienty a (kvadratický člen), b (lineárne člen), c (absolútny člen) a podmienkou ošetríme nasledujúce prípady:
- a = 0, b = 0, c = 0 (všetky koeficienty sú nulové)
- Riešením je každé reálne číslo.
- a! = 0 (kvadratický člen je rôzny od nuly)
Ak sa b alebo c rovná nule, kvadratická rovnica je neúplná, ale možno ju spočítať. Rovnica má jedno, dve alebo žiadne riešenie. Počet riešenie vypočítame pomocou diskriminant a zanedbáme, že by to išlo v prípade nulových koeficientov bac málinko rýchlejšie (už takto je tam tých podmienok dosť Keby to niekomu vadilo, nie je problém upraviť)
d = b 2 - 4ac.
Ak je d> 0, rovnica má 2 riešenia:
- x1 = (-b - sqrt (b 2 - 4ac)) / 2a
- x2 = (-b + sqrt (b 2 - 4ac)) / 2a
Ak je d = 0, rovnica má jedno riešenie:
- x = (-b + sqrt (b 2 - 4ac)) / 2a
V prípade d <0:
- Rovnica nemá v obore reálnych čísel riešenia.
- a = 0 (kvadratický člen je nulový)
Bez kvadratického členovi sa nejedná o kvadratickú rovnicu. Môže ísť buď o rovnicu lineárne alebo to rovnica vôbec nie je.
3a) b! = 0 (b je rôzne od nuly)
Jedná sa o lineárny rovnicu a riešením je: x = -c / b
3b) b = 0 (b je nulové)
Nie je to rovnice, nie je potrebné riešiť.
Vývojový diagram
Zdrojový kód [PASCAL]
uses crt; var a,b,c,x1,x2,d : real; { vyznam promennych : a,b,c . . . koeficienty x1,x2 . . . koreny rovnice d . . . . . diskriminant } begin clrscr; { ************************** zadavani koeficientu ************************* } writeln('Zadejte prosim koeficienty kvadraticke rovnice: '); write('a : '); readln(a); write('b : '); readln(b); write('c : '); readln(c); { *********************** osetreni koeficientu a vypocet ********************* } if (a = 0) and (b = 0) and (c = 0) then begin writeln('Toto neni kvadraticka rovnice'); write('Vsechna realna cisla jsou resenim.'); end else if (a = 0) then begin if (b <> 0) then write('Rovnice je linearni: x = ',-c/b); else write('Toto neni rovnice!'); end else begin d:=sqr(b) - (4 * a * c); if (d > 0) then begin x1:=(-b - sqrt(sqr(b) -4 * a * c)) / (2 * a); x2:=(-b + sqrt(sqr(b) -4 * a * c)) / (2 * a); writeln('Rovnice ma dve reseni : x1 = ',x1); writeln(' x2 = ',x2); end else if (d = 0) then begin x1:=(-b - sqrt(sqr(b) -4 * a * c)) / (2 * a); writeln('Rovnice ma jedno reseni : x = ',x1); end else writeln('Rovnice nema reseni v oboru realnych cisel'); end; end.