|
Serwis Edukacyjny w I-LO w Tarnowie
Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2026 mgr Jerzy Wałaszek
|
W naszym serwisie jest nowszy artykuł o obliczaniu pierwiastków funkcji: "Metody numeryczne".
| SPIS TREŚCI |
| Podrozdziały |
Równanie sześcienne posiada następującą postać:

Algorytm znajdowania pierwiastków takiego równania jest dużo bardziej skomplikowany niż dla równania kwadratowego.
Wyznaczamy trzy współczynniki f, g i h wg wzorów:

W zależności od wartości wyliczonych współczynników rozróżniamy trzy przypadki:
Jeśli h > 0,
pierwiastek wyliczamy ze wzoru:

W przypadku f = 0 i g = 0 równanie posiada pierwiastek potrójny (tzn. trzy pierwiastki o tej samej wartości). Wartość pierwiastka wyznaczamy ze wzoru:

W tym przypadku wyznaczamy kolejne współczynniki pomocnicze i, j, k, m, n i p:

Gdy współczynniki pomocnicze są obliczone, pierwiastki równania otrzymujemy ze wzorów:

Przykład:
Dla przykładu obliczymy pierwiastki trzech równań sześciennych:
Równanie 1:





Ponieważ h > 0, zatem równanie posiada tylko jeden pierwiastek rzeczywisty:


Równanie 2:


Ponieważ współczynniki f i g są równe 0, równanie posiada pierwiastek potrójny:

Równanie 3:


Ponieważ h < 0, zachodzi przypadek trzech pierwiastków rzeczywistych. Najpierw obliczamy współczynniki pomocnicze:

Teraz obliczamy kolejne niewiadome:

| a,b,c,d | – | współczynniki równania ax3 + bx2 + cx + d = 0. a,b,c,d ∈ R |
| x1, x2, x3 | – | poszukiwane pierwiastki oraz informacja o ich liczbie i typie: jeden pierwiastek rzeczywisty, pierwiastek potrójny i trzy pierwiastki rzeczywiste. |
| i,j,k,m,n,p | – współczynniki pomocnicze i, j, k, m, n, p ∈ R |
| ε | – określa dokładność porównania z zerem. ε = 0.0000000001 |
Ponieważ algorytm jest dosyć rozbudowany obliczeniowo, zrezygnowaliśmy z publikowania jego schematu blokowego, który w sumie jest prosty, lecz rozległy. Podajemy jedynie listę kroków. Wyjaśnienie wykonywanych operacji znajdzie czytelnik na początku tego rozdziału.
| K01: | Czytaj a, b, c, d |
| K02: | Jeśli
| a
| < ε, to pisz "To nie jest równanie sześcienne" i zakończ |
| K03: | Oblicz współczynniki pomocnicze:![]() |
| K04: | Jeśli
| f
| < ε ∧
|
g | < ε, to idź do kroku K09 |
| K05: | Jeśli h
≥
ε, to idź do kroku K11 |
| K06: | Oblicz współczynniki pomocnicze:![]() |
| K07: | Oblicz pierwiastki:![]() |
| K08: | Pisz "Trzy pierwiastki rzeczywiste",
x1, x2,
x3 i zakończ |
| K09: | Oblicz pierwiastki:![]() |
| K10: | Pisz "Pierwiastek potrójny",
x1,
x2, x3 i zakończ |
| K11: | Oblicz pierwiastek:![]() |
| K12: | Pisz "Jeden pierwiastek rzeczywisty",
x1 i zakończ |
Programy wczytują wartości współczynników a, b, c i d a następnie wyznaczają, o ile jest to możliwe, pierwiastki równania sześciennego o wprowadzonych współczynnikach.
C++// Program rozwiązuje równanie sześcienne
//---------------------------------------
// (C)2006 mgr J.Wałaszek I LO w Tarnowie
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
using namespace std;
const double EPS = 0.0000000001; // dokładność porównania z zerem
// funkcja wylicza pierwiastek 3 stopnia
//--------------------------------------
inline double qrt(double x)
{
return fabs(x) < EPS ? 0 : (x > 0 ? exp(log(x)/3) : -exp(log(-x)/3));
}
//-----------------------------------------------------
// Program główny
//-----------------------------------------------------
int main()
{
double a,b,c,d,f,g,h,i,j,k,m,n,p,x1,x2,x3;
cout << setprecision(5) // 5 cyfr po przecinku
<< fixed; // format stałoprzecinkowy
cout << "Demonstracja rozwiazywania rownania szesciennego:\n"
"ax^3 + bx^2 + cx + d = 0\n"
"-------------------------------------------------\n"
"(C)2006 mgr Jerzy Walaszek I LO w Tarnowie\n\n"
"Podaj kolejno wspolczynniki a, b, c i d:\n\n";
cout << "a = "; cin >> a;
cout << "b = "; cin >> b;
cout << "c = "; cin >> c;
cout << "d = "; cin >> d;
cout << "\n-------------------------------------------------\n\n"
"WYNIKI:\n\n";
if(fabs(a) < EPS)
cout << "To nie jest rownanie szescienne\n";
else
{
// Obliczamy współczynniki pomocnicze f,g i h
f = (c - b*b/3/a)/a;
g = ((2*b*b/9/a - c)/a*b/3 + d)/a;
h = g*g/4 + f*f*f/27;
// Sprawdzamy kolejne warunki
if((fabs(f) < EPS) && (fabs(g) < EPS))
{
// Pierwiastek potrójny
x1 = x2 = x3 = - qrt(d/a);
cout << "Pierwiastek potrojny:\n"
"\nx1 = " << setw(12) << x1 <<
"\nx2 = " << setw(12) << x2 <<
"\nx3 = " << setw(12) << x3 << endl;
}
else if(h >= EPS)
{
// Jeden pierwiastek rzeczywisty
x1 = qrt(-g/2 + sqrt(h)) + qrt(-g/2 - sqrt(h)) - b/3/a;
cout << "Jeden pierwiastek rzeczywisty:\n\n"
"x1 = " << setw(12) << x1 << endl;
}
else
{
// Trzy pierwiastki rzeczywiste
i = sqrt(g*g/4 - h);
j = qrt(i);
k = acos(-g/2/i);
m = cos(k/3);
n = sqrt(3)*sin(k/3);
p = -b/3/a;
x1 = 2*j*m + p;
x2 = -j*(m + n) + p;
x3 = -j*(m - n) + p;
cout << "Trzy pierwiastki rzeczywiste:\n"
"\nx1 = " << setw(12) << x1 <<
"\nx2 = " << setw(12) << x2 <<
"\nx3 = " << setw(12) << x3 << endl;
}
}
cout << "\n------------------------------------------------\n\n";
system("pause");
return 0;
}
|
Pascal// Program rozwiązuje równanie sześcienne
//---------------------------------------
// (C)2006 mgr J.Wałaszek I LO w Tarnowie
program mzfk2;
uses math;
const
EPS = 0.0000000001; // dokładność porównania z zerem
// funkcja wylicza pierwiastek 3 stopnia
//--------------------------------------
function qrt(x : real) : double;
begin
if abs(x) < EPS then
Result := 0
else
Result := sign(x)*exp(ln(abs(x))/3);
end;
//-----------------------------------------------------
// Program główny
//-----------------------------------------------------
var
a,b,c,d,f,g,h,i,j,k,m,n,p,x1,x2,x3 : double;
begin
writeln('Demonstracja rozwiazywania rownania szesciennego:');
writeln('ax^3 + bx^2 + cx + d = 0');
writeln('-------------------------------------------------');
writeln('(C)2006 mgr Jerzy Walaszek I LO w Tarnowie');
writeln;
writeln('Podaj kolejno wspolczynniki a, b, c i d:');
writeln;
write('a = '); readln(a);
write('b = '); readln(b);
write('c = '); readln(c);
write('d = '); readln(d);
writeln;
writeln('-------------------------------------------------');
writeln;
writeln('WYNIKI:');
writeln;
if abs(a) < EPS then
writeln('To nie jest rownanie szescienne')
else
begin
// Obliczamy współczynniki pomocnicze f,g i h
f := (c - b*b/3/a)/a;
g := ((2*b*b/9/a - c)/a*b/3 + d)/a;
h := g*g/4 + f*f*f/27;
// Sprawdzamy kolejne warunki
if (abs(f) < EPS) and (abs(g) < EPS) then
begin
// Pierwiastek potrójny
x1 := - qrt(d/a);
x2 := x1;
x3 := x1;
writeln('Pierwiastek potrojny:');
writeln;
writeln('x1 = ',x1:12:5);
writeln('x2 = ',x2:12:5);
writeln('x3 = ',x3:12:5);
end
else if h >= EPS then
begin
// Jeden pierwiastek rzeczywisty
x1 := qrt(-g/2 + sqrt(h)) + qrt(-g/2 - sqrt(h)) - b/3/a;
writeln('Jeden pierwiastek rzeczywisty:');
writeln;
writeln('x1 = ',x1:12:5);
end
else
begin
// Trzy pierwiastki rzeczywiste
i := sqrt(g*g/4 - h);
j := qrt(i);
k := arccos(-g/2/i);
m := cos(k/3);
n := sqrt(3)*sin(k/3);
p := -b/3/a;
x1 := 2*j*m + p;
x2 := -j*(m + n) + p;
x3 := -j*(m - n) + p;
writeln('Trzy pierwiastki rzeczywiste:');
writeln;
writeln('x1 = ',x1:12:5);
writeln('x2 = ',x2:12:5);
writeln('x3 = ',x3:12:5);
end;
end;
writeln;
writeln('-------------------------------------------------');
writeln('Koniec. Nacisnij klawisz Enter...');
readln;
end.
|
Basic' Program rozwiązuje równanie sześcienne
'---------------------------------------
' (C)2006 mgr J.Wałaszek I LO w Tarnowie
Declare Function qrt(x As Double) As Double
Const EPS As Double = 0.0000000001 ' dokładność porównania z zerem
'-----------------------------------------------------
' Program główny
'-----------------------------------------------------
Dim As double a, b, c, d, f, g, h, i, j, k, m, n, p, x1, x2, x3
Print "Demonstracja rozwiazywania rownania szesciennego:"
Print "ax^3 + bx^2 + cx + d = 0"
Print "-------------------------------------------------"
Print "(C)2006 mgr Jerzy Walaszek I LO w Tarnowie"
Print
Print "Podaj kolejno wspolczynniki a,b,c i d:"
Print
Input "a = ", a
Input "b = ", b
Input "c = ", c
Input "d = ", d
Print
Print "-------------------------------------------------"
Print
Print "WYNIKI:"
Print
If Abs(a) < EPS Then
print "To nie jest rownanie szescienne"
Else
' Obliczamy współczynniki pomocnicze f, g i h
f = (c - b * b / 3 / a) / a
g = ((2 * b * b / 9 / a - c) / a * b / 3 + d) / a
h = g * g / 4 + f * f * f / 27
' Sprawdzamy kolejne warunki
If (Abs(f) < EPS) And (Abs(g) < EPS) Then
' Pierwiastek potrójny
x1 = -qrt(d / a)
x2 = x1
x3 = x1
print "Pierwiastek potrojny:"
Print
print Using "x1 = ######.#####"; x1
print Using "x2 = ######.#####"; x2
print Using "x3 = ######.#####"; x3
ElseIf h >= EPS Then
' Jeden pierwiastek rzeczywisty
x1 = qrt(-g / 2 + Sqr(h)) + qrt(-g / 2 - Sqr(h)) - b / 3 / a
print "Jeden pierwiastek rzeczywisty:"
Print
print Using "x1 = ######.#####"; x1
Else
' Trzy pierwiastki rzeczywiste
i = Sqr(g * g / 4 - h)
j = qrt(i)
k = ACos(-g / 2 / i)
m = Cos(k / 3)
n = Sqr(3) * Sin(k / 3)
p = -b / 3 / a
x1 = 2 * j * m + p
x2 = -j * (m + n) + p
x3 = -j * (m - n) + p
Print "Trzy pierwiastki rzeczywiste:"
Print
print Using "x1 = ######.#####"; x1
print Using "x2 = ######.#####"; x2
print Using "x3 = ######.#####"; x3
End If
End If
Print
Print "-------------------------------------------------"
Print
Print "Koniec. Nacisnij klawisz Enter..."
Sleep
End
' funkcja wylicza pierwiastek 3 stopnia
'--------------------------------------
Function qrt(x As Double) As Double
If Abs(x) < EPS Then
qrt = 0
Else
qrt = Sgn(x) * Exp(Log(Abs(x)) / 3)
End If
End Function
|
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 sześciennego
</h3>
<p style="TEXT-ALIGN: center">
<i>ax<sup>3</sup> + bx<sup>2</sup> + cx + d = 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="table144" cellpadding="8"
style="border-collapse: collapse">
<tr>
<td>
a = <input type="text" name="wsp_a" size="10" value="1"
style="text-align: right">
</td>
<td>
b = <input type="text" name="wsp_b" size="10" value="-6"
style="text-align: right">
</td>
<td>
c = <input type="text" name="wsp_c" size="10" value="11"
style="text-align: right">
</td>
<td>
d = <input type="text" name="wsp_d" size="10" value="-6"
style="text-align: right">
</td>
<td>
<input type="button" value="Rozwiąż" name="B1" onclick="main()">
</td>
</tr>
</table>
</div>
<div id="out" align=center>...</div>
</form>
<script language=javascript>
// Program rozwiązuje równanie sześcienne
//---------------------------------------
// (C)2006 mgr J.Wałaszek I LO w Tarnowie
var EPS = 0.0000000001; // dokładność porównania z zerem
// funkcja wylicza pierwiastek 3 stopnia
//--------------------------------------
function qrt(x)
{
return Math.abs(x) < EPS ? 0 :
(x > 0 ? Math.exp(Math.log(x)/3) : -Math.exp(Math.log(-x)/3));
}
//-----------------------------------------------------
// Program główny
//-----------------------------------------------------
function main()
{
var a,b,c,d,f,g,h,i,j,k,m,n,p,x1,x2,x3,t;
a = parseFloat(document.frmbincode.wsp_a.value);
b = parseFloat(document.frmbincode.wsp_b.value);
c = parseFloat(document.frmbincode.wsp_c.value);
d = parseFloat(document.frmbincode.wsp_d.value);
if(isNaN(a) || isNaN(b) || isNaN(c) || isNaN(d))
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 równanie sześcienne</b></font>";
else
{
// Obliczamy współczynniki pomocnicze f,g i h
f = (c - b*b/3/a)/a;
g = ((2*b*b/9/a - c)/a*b/3 + d)/a;
h = g*g/4 + f*f*f/27;
// Sprawdzamy kolejne warunki
if((Math.abs(f) < EPS) && (Math.abs(g) < EPS))
{
// Pierwiastek potrójny
x1 = x2 = x3 = - qrt(d/a);
t = "Pierwiastek potrojny:<BR><BR>" +
"x<sub>1</sub> = " + x1 + "<BR>" +
"x<sub>2</sub> = " + x2 + "<BR>" +
"x<sub>3</sub> = " + x3;
}
else if(h >= EPS)
{
// Jeden pierwiastek rzeczywisty
x1 = qrt(-g/2 + Math.sqrt(h)) + qrt(-g/2 - Math.sqrt(h)) - b/3/a;
t = "Jeden pierwiastek rzeczywisty:<BR><BR>" +
"x<sub>1</sub> = " + x1;
}
else
{
// Trzy pierwiastki rzeczywiste
i = Math.sqrt(g*g/4 - h);
j = qrt(i);
k = Math.acos(-g/2/i);
m = Math.cos(k/3);
n = Math.sqrt(3)*Math.sin(k/3);
p = -b/3/a;
x1 = 2*j*m + p;
x2 = -j*(m + n) + p;
x3 = -j*(m - n) + p;
t = "Trzy pierwiastki rzeczywiste:<BR><BR>" +
"x<sub>1</sub> = " + x1 + "<BR>" +
"x<sub>2</sub> = " + x2 + "<BR>" +
"x<sub>3</sub> = " + x3;
}
}
document.getElementById("out").innerHTML = t;
}
</script>
</div>
</body>
</html>
|
| Wynik: |
| Demonstracja rozwiązywania
równania sześciennego: ax^3 + bx^2 + cx + d = 0 ------------------------------------------------- (C)2006 mgr Jerzy Wałaszek I LO w Tarnowie Podaj kolejno współczynniki a,b,c i d: a = 1 b = -6 c = 11 d = -6 ------------------------------------------------- WYNIKI: Trzy pierwiastki rzeczywiste: x1 = 3,00000 x2 = 1,00000 x3 = 2,00000 ------------------------------------------------- Koniec. Naciśnij klawisz Enter... |
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.