Login lub e-mail Hasło   

Miejsca zerowe funkcji - Równania wielomianowe

Odnośnik do oryginalnej publikacji: http://www.i-lo.tarnow.pl/edu/inf/alg/zm(...)ex.html
Równanie kwadratowe posiada następującą postać: ax 2 + bx + c = 0 , a 0 gdzie x to poszukiwana niewiadoma , a a, b, c to współczynniki równania ....
Wyświetlenia: 27.466 Zamieszczono 04/11/2006

Równanie kwadratowe posiada następującą postać:

ax2 + bx + c = 0,  a 0

gdzie x to poszukiwana niewiadoma, a a, b, c to współczynniki równania. Pierwiastkiem równania jest taka wartość niewiadomej x, która podstawiona w jej miejsce do równania spełnia je. Zwykle równanie kwadratowe posiada dwa pierwiastki rzeczywiste (lub zespolone - nie będziemy się nimi zajmować). Jeśli istnieje tylko jedna taka liczba, to mówimy, iż jest ona pierwiastkiem podwójnym.

Pierwiastkami równania kwadratowego x2 - x - 6 = 0 są dwie liczby x1 = 3 i x2 = -2, ponieważ:

(x1)2 - (x1) - 6 = 32 - 3 - 6 = 9 - 3 - 6 = 0 - równanie jest spełnione

(x2)2 - (x2) - 6 = (-2)2 - (-2) - 6 = 4 + 2 - 6 = 0 - równanie jest spełnione


Matematycy opracowali na przestrzeni wieków rozwoju matematyki wiele metod rozwiązywania równań kwadratowych. My wykorzystamy metodę "szkolną", którą powinien doskonale znać uczeń liceum.

Obliczamy wyróżnik równania kwadratowego Δ:

W zależności od wartości wyróżnika Δ mamy trzy możliwe przypadki:

1. Δ > 0, istnieją dwa pierwiastki rzeczywiste:

2. Δ = 0, istnieje jeden pierwiastek podwójny:

3. Δ < 0, nie istnieją pierwiastki rzeczywiste (równanie posiada jedynie pierwiastki zespolone, które są liczbami sprzężonymi).

Rozwiążmy podaną metodą równanie z poprzedniego przykładu:

x2 - x - 6 = 0

a = 1,  b = -1,  c = -6

Obliczamy wyróżnik Δ:

Wyróżnik Δ jest większy od 0, zatem równanie posiada dwa pierwiastki rzeczywiste:


Dane wejściowe

a, b, c - współczynniki równania kwadratowego. a,b,c R

Dane wyjściowe

x1, x2 - pierwiastki równania kwadratowego lub informacja, iż równanie nie posiada pierwiastków rzeczywistych.
x1, x2 R

Zmienne pomocnicze i funkcje

Δ - wyróżnik równania kwadratowego. Δ R
ε - określa dokładność porównania z zerem. ε = 0.0000000001
krok 1: Odczytaj współczynniki a, b, c
krok 2: Jeśli | a | < ε, pisz "To nie jest równanie kwadratowe" i zakończ algorytm
krok 3: Δ b2 - 4ac
krok 4: Jeśli | Δ | < ε, to Δ 0
krok 5: Jeśli Δ < 0, pisz "Brak pierwiastków rzeczywistych" i zakończ algorytm
krok 6:
krok 7: Pisz x1, x2 i zakończ algorytm

Algorytm obliczania pierwiastków równania kwadratowego rozpoczynamy od wczytania wartości współczynników a, b oraz c.

Jeśli współczynnik a przy x2 wynosi 0 (wpada w otoczenie 0 o promieniu ε) to nie mamy do czynienia z równaniem kwadratowym. Wypisujemy odpowiedni komunikat i kończymy algorytm.

Obliczamy wyróżnik Δ. Następnie sprawdzamy, czy Δ jest w otoczeniu ε zera. Jeśli tak, to zerujemy go - w ten sposób uprościmy znacznie algorytm.

Kolejny test sprawdza, czy wyróżnik Δ jest mniejszy od zera (kolejność testów jest tutaj bardzo ważna). Jeśli tak, to równanie nie posiada pierwiastków rzeczywistych. Wypisujemy odpowiedni komunikat i kończymy algorytm.

Pozostał przypadek, gdy wyróżnik Δ jest albo równy, albo większy od 0. W obu przypadkach obliczamy dwa pierwiastki x1 i x2. Wypisujemy je i kończymy algorytm.


   
   
   

Poniższe, przykładowe programy są praktyczną realizacją omawianego w tym rozdziale algorytmu. Zapewne można je napisać bardziej efektywnie. To już twoje zadanie. Dokładny opis stosowanych środowisk programowania znajdziesz we wstępie. Programy przed opublikowaniem w serwisie edukacyjnym zostały dokładnie przetestowane. Jeśli jednak znajdziesz jakąś usterkę (co zawsze może się zdarzyć), to prześlij o niej informację do autora. Pozwoli to ulepszyć nasze artykuły. Będziemy Ci za to wdzięczni.

 
       

Programy wczytują wartości współczynników a, b i c, a następnie wyznaczają, o ile jest to możliwe, pierwiastki równania kwadratowego o wprowadzonych współczynnikach.

Wydruk z uruchomionego programu
Demonstracja rozwiązywania równania kwadratowego:
ax^2 + bx + c = 0
-------------------------------------------------
(C)2006 mgr Jerzy Wałaszek I LO w Tarnowie

Podaj kolejno współczynniki a,b i c:

a = 1
b = -1
c = -6

-------------------------------------------------

WYNIKI:

x1 = 3,00000
x2 = -2,00000

-------------------------------------------------
Koniec. Naciśnij klawisz Enter...
Microsoft Visual Basic 2005 Express Edition

 

Borland
Delphi 7.0
Personal
Edition
// Program rozwiązuje równanie kwadratowe
//---------------------------------------
// (C)2006 mgr J.Wałaszek I LO w Tarnowie

program mzfk1;

{$APPTYPE CONSOLE}

const
EPS = 0.0000000001; // dokładność porównania z zerem
var
a,b,c,delta,x1,x2 : real;
begin
writeln('Demonstracja rozwiazywania rownania kwadratowego:');
writeln('ax^2 + bx + c = 0');
writeln('-------------------------------------------------');
writeln('(C)2006 mgr Jerzy Walaszek I LO w Tarnowie');
writeln;
writeln('Podaj kolejno wspolczynniki a,b i c:');
writeln;
write('a = '); readln(a);
write('b = '); readln(b);
write('c = '); readln(c);
writeln;
writeln('-------------------------------------------------');
writeln;
writeln('WYNIKI:');
writeln;
if abs(a) < EPS then
writeln('To nie jest rownanie kwadratowe')
else
begin

delta := b * b - 4 * a * c;
if abs(delta) < EPS then delta := 0;
if delta < 0 then
writeln('Brak pierwiastkow rzeczywistych')
else
begin

x1 := (-b + sqrt(delta)) / 2 / a;
x2 := (-b - sqrt(delta)) / 2 / a;
writeln('x1 = ',x1:12:5);
writeln('x2 = ',x2:12:5);
end;
end;
writeln;
writeln('-------------------------------------------------');
writeln('Koniec. Nacisnij klawisz Enter...');
readln;
end.
Borland
C++ Builder
6.0
Personal
Edition
// Program rozwiązuje równanie kwadratowe
//---------------------------------------
// (C)2006 mgr J.Wałaszek I LO w Tarnowie

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main(int argc, char* argv[])
{
const double EPS = 0.0000000001; // dokładność porównania z zerem

double a,b,c,delta,x1,x2;

cout.precision(5); // 5 cyfr po przecinku
cout.setf(ios::fixed); // format stałoprzecinkowy

cout << "Demonstracja rozwiazywania rownania kwadratowego:\n"
"ax^2 + bx + c = 0\n"
"-------------------------------------------------\n"
"(C)2006 mgr Jerzy Walaszek I LO w Tarnowie\n\n"
"Podaj kolejno wspolczynniki a,b i c:\n\n"
;
cout << "a = "; cin >> a;
cout << "b = "; cin >> b;
cout << "c = "; cin >> c;
cout << "\n-------------------------------------------------\n\n"
"WYNIKI:\n\n"
;
if(fabs(a) < EPS)
cout << "To nie jest rownanie kwadratowe\n";
else
{
delta = b * b - 4 * a * c;
if(fabs(delta) < EPS) delta = 0;
if(delta < 0)
cout << "Brak pierwiastkow rzeczywistych\n";
else
{
x1 = (-b + sqrt(delta)) / 2 / a;
x2 = (-b - sqrt(delta)) / 2 / a;
cout << "x1 = " << setw(12) << x1 << endl
<< "x2 = " << setw(12) << x2 << endl;
}
}
cout << "\n------------------------------------------------\n";
system("pause");
return 0;
}
Microsoft
Visual
Basic 2005
Express
Edition
' Program rozwiązuje równanie kwadratowe
'---------------------------------------
' (C)2006 mgr J.Wałaszek I LO w Tarnowie

Module Module1

Sub Main()

Const EPS = 0.0000000001 ' dokładność porównania z zerem

Dim a, b, c, delta, x1, x2 As Double

Console.WriteLine("Demonstracja rozwiązywania równania kwadratowego:")
Console.WriteLine("ax^2 + bx + c = 0")
Console.WriteLine("-------------------------------------------------")
Console.WriteLine("(C)2006 mgr Jerzy Wałaszek I LO w Tarnowie")
Console.WriteLine()
Console.WriteLine("Podaj kolejno współczynniki a,b i c:")
Console.WriteLine()
Console.Write("a = ") : a = Val(Console.ReadLine)
Console.Write("b = ") : b = Val(Console.ReadLine)
Console.Write("c = ") : c = Val(Console.ReadLine)
Console.WriteLine()
Console.WriteLine("-------------------------------------------------")
Console.WriteLine()
Console.WriteLine("WYNIKI:")
Console.WriteLine()
If Math.Abs(a) < EPS Then
Console.WriteLine("To nie jest równanie kwadratowe")
Else
delta = b * b - 4 * a * c
If Math.Abs(delta) < EPS Then delta = 0
If delta < 0 Then
Console.WriteLine("Brak pierwiastków rzeczywistych")
Else
x1 = (-b + Math.Sqrt(delta)) / 2 / a
x2 = (-b - Math.Sqrt(delta)) / 2 / a
Console.WriteLine("x1 = {0,12:F5}", x1)
Console.WriteLine("x2 = {0,12:F5}", x2)
End If
End If

Console.WriteLine()
Console.WriteLine("-------------------------------------------------")
Console.WriteLine("Koniec. Naciśnij klawisz Enter...")
Console.ReadLine()
End Sub

End Module
Python
# -*- coding: cp1250 -*-
# Program rozwiązuje równanie kwadratowe
#---------------------------------------
# (C)2006 mgr J.Wałaszek I LO w Tarnowie

import math

EPS = 0.0000000001 # dokładność porównania z zerem

print "Demonstracja rozwiazywania rownania kwadratowego:"
print "ax^2 + bx + c = 0"
print "-------------------------------------------------"
print "(C)2006 mgr Jerzy Walaszek I LO w Tarnowie"
print
print
"Podaj kolejno wspolczynniki a,b i c:"
print
a = float(raw_input("a = "))
b = float(raw_input("b = "))
c = float(raw_input("c = "))
print
print
"-------------------------------------------------"
print
print
"WYNIKI:"
print
if abs
(a) < EPS:
print "To nie jest rownanie kwadratowe"
else:
delta = b * b - 4 * a * c
if abs(delta) < EPS: delta = 0
if delta < 0:
print "Brak pierwiastkow rzeczywistych"
else:
x1 = (-b + math.sqrt(delta)) / 2 / a
x2 = (-b - math.sqrt(delta)) / 2 / a
print "x1 = %12.5f" % x1
print "x2 = %12.5f" % x2
print
print
"---------------------------------------------------------"
raw_input("Koniec. Nacisnij klawisz Enter...")
JavaScript
<html>
<head>
</head>
<body>
<div align=
"center">
<form style=
"BORDER-RIGHT: #ff9933 1px outset; PADDING-RIGHT: 4px;
BORDER-TOP: #ff9933 1px outset; PADDING-LEFT: 4px;
PADDING-BOTTOM: 1px; BORDER-LEFT: #ff9933 1px outset;
PADDING-TOP: 1px; BORDER-BOTTOM: #ff9933 1px outset;
BACKGROUND-COLOR: #ffcc66"
name="frmbincode">
<h3 style=
"TEXT-ALIGN: center">
Demonstracja rozwiązywania równania kwadratowego
</h3>
<p style=
"TEXT-ALIGN: center">
<i>
ax<sup>2</sup> + bx + c = 0</i>
</p>
<p style=
"TEXT-ALIGN: center">
(C)2006 mgr Jerzy Wałaszek I LO w Tarnowie
</p>
<hr>
<p style=
"text-align: center">
Wpisz do pól edycyjnych kolejne współczynniki równania
</p>
<div align=
"center">
<table border=
"0" id="table146" cellpadding="8"
style="border-collapse: collapse">
<tr>
<td>

a = <input type="text" name="wsp_a" size="15" value="1"
style="text-align: right">
</td>
<td>

b = <input type="text" name="wsp_b" size="15" value="-1"
style="text-align: right">
</td>
<td>

c = <input type="text" name="wsp_c" size="15" value="-6"
style="text-align: right">
</td>
<td>
<input type=
"button" value="Rozwiąż równanie" name="B1"
onclick="main()">
</td>
</tr>
</table>
</div>
<div id=
"out" align="center">...</div>
</form>

<script language=
javascript>

// Program rozwiązuje równanie kwadratowe
//---------------------------------------
// (C)2006 mgr J.Wałaszek I LO w Tarnowie

function main()
{
var EPS = 0.0000000001; // dokładność porównania z zerem
var a,b,c,delta,x1,x2,t;

a = parseFloat(document.frmbincode.wsp_a.value);
b = parseFloat(document.frmbincode.wsp_b.value);
c = parseFloat(document.frmbincode.wsp_c.value);
if(isNaN(a) || isNaN(b) || isNaN(c))
t = "<font color=red><b>Nieprawidłowe współczynniki!</b></font>";
else if(Math.abs(a) < EPS)
t = "<font color=red><b>To nie jest rownanie kwadratowe</b></font>";
else
{
delta = b * b - 4 * a * c;
if(Math.abs(delta) < EPS) delta = 0;
if(delta < 0)
t = "<font color=red><b>Brak pierwiastkow rzeczywistych</b></font>";
else
{
x1 = (-b + Math.sqrt(delta)) / 2 / a;
x2 = (-b - Math.sqrt(delta)) / 2 / a;
t = "x<sub>1</sub> = " + x1 + "<BR>x<sub>2</sub> = " + x2;
}
}
document.getElementById("out").innerHTML = t;
}

</script>
</div>
</body>
</html>
 
 
Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.
   document.frmadminemail.adminemail_tytul.value = parent.document.title + " : " + document.title;   

Podobne artykuły


16
komentarze: 5 | wyświetlenia: 9003
9
komentarze: 0 | wyświetlenia: 2782
49
komentarze: 18 | wyświetlenia: 64971
37
komentarze: 9 | wyświetlenia: 28513
17
komentarze: 4 | wyświetlenia: 14162
15
komentarze: 5 | wyświetlenia: 32758
13
komentarze: 2 | wyświetlenia: 22958
12
komentarze: 3 | wyświetlenia: 29778
12
komentarze: 2 | wyświetlenia: 18504
11
komentarze: 2 | wyświetlenia: 33148
11
komentarze: 1 | wyświetlenia: 86396
11
komentarze: 1 | wyświetlenia: 10468
10
komentarze: 1 | wyświetlenia: 34967
10
komentarze: 5 | wyświetlenia: 20412
 
Autor
Artykuł

Powiązane tematy





Oby jak najwięcej popularnonaukowych artykułów jak ten nam do eioby trafiało! Popieram takie artykuły, chociażby i dlatego, że napisanie programów lepszych miewa zwykle miejsce z dokładnego analizowania kodu już istniejących!

przydatne dla ... licealistów :)



Dodaj swoją opinię
W trosce o jakość komentarzy wymagamy od użytkowników, aby zalogowali się przed dodaniem komentarza. Jeżeli nie posiadasz jeszcze swojego konta, zarejestruj się. To tylko chwila, a uzyskasz dostęp do dodatkowych możliwości!
 

© 2005-2018 grupa EIOBA. Wrocław, Polska