|
Serwis Edukacyjny Nauczycieli 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;
// Dokładność porównania z zerem
const double EPS = 0.0000000001;
// 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)
<< fixed
<< "Rownanie szescienne\n"
" 3 2\n"
"ax + bx + cx + d = 0\n"
"--------------------------\n"
"(C)2006 mgr Jerzy Walaszek\n\n";
cout << "a = "; cin >> a;
cout << "b = "; cin >> b;
cout << "c = "; cin >> c;
cout << "d = "; cin >> d;
cout << "\nWYNIKI:\n\n";
if(fabs(a) < EPS)
cout << "Brak rownani szesciennego\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:\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:\n"
<< "\nx1 = " << setw(12) << x1
<< "\nx2 = " << setw(12) << x2
<< "\nx3 = " << setw(12) << x3
<< endl;
}
}
cout << endl << endl;
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
// Dokładność porównania z zerem
EPS = 0.0000000001;
// 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('Rownanie szescienne');
writeln(' 3 2');
writeln('ax + bx + cx + d = 0');
writeln('--------------------------');
writeln('(C)2006 mgr Jerzy Walaszek');
writeln;
write('a = '); readln(a);
write('b = '); readln(b);
write('c = '); readln(c);
write('d = '); readln(d);
writeln;
writeln('WYNIKI:');
writeln;
if abs(a) < EPS then
writeln('Brak rownania szesciennego')
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:');
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:');
writeln;
writeln('x1 = ',x1:12:5);
writeln('x2 = ',x2:12:5);
writeln('x3 = ',x3:12:5);
end;
end;
writeln;
writeln('Nacisnij 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
' Dokładność porównania z zerem
Const EPS As Double = 0.0000000001
'---------------
' Program główny
'---------------
Dim As double a, b, c, d, f, g, h, i, _
j, k, m, n, p, x1, x2, x3
Print "Rownanie szescienne"
Print " 3 2"
Print "ax + bx + cx + d = 0"
Print "--------------------------"
Print "(C)2006 mgr Jerzy Walaszek"
Print
Input "a = ", a
Input "b = ", b
Input "c = ", c
Input "d = ", d
Print
Print "WYNIKI:"
Print
If Abs(a) < EPS Then
Print "Brak rownania szesciennego"
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:"
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 "Nacisnij 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
|
Python
(dodatek)# Program rozwiązuje równanie sześcienne
#---------------------------------------
# (C)2026 mgr J.Wałaszek I LO w Tarnowie
import math
# dokładność porównania z zerem
EPS = 0.0000000001
#---------------
# Program główny
#---------------
print("Równanie sześcienne")
print(" 3 2")
print("ax + bx + cx + d = 0")
print("--------------------------")
print("(C)2026 mgr Jerzy Wałaszek")
print()
a = float(input("a = "))
b = float(input("b = "))
c = float(input("c = "))
d = float(input("d = "))
print()
print("WYNIKI:")
print()
if abs(a) < EPS:
print("Brak równania sześciennego")
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):
# Pierwiastek potrójny
x1 = -qrt(d / a)
x2,x3 = x1,x1
print("Pierwiastek potrójny:")
print()
print("x1 = %12.5f" % x1)
print("x2 = %12.5f" % x2)
print("x3 = %12.5f" % x3)
elif h >= EPS:
# Jeden pierwiastek rzeczywisty
x1 = math.cbrt(-g / 2 + math.sqrt(h)) + \
math.cbrt(-g / 2 - math.sqrt(h)) - \
b / 3 / a
print("Jeden pierwiastek:")
print()
print("x1 = %12.5f" % x1)
else:
# Trzy pierwiastki rzeczywiste
i = math.sqrt(g * g / 4 - h)
j = math.cbrt(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
print("Trzy pierwiastki rzeczywiste:")
print()
print("x1 = %12.5f" % x1)
print("x2 = %12.5f" % x2)
print("x3 = %12.5f" % x3)
print()
input("Naciśnij Enter...")
|
| Wynik: |
Równanie sześcienne 3 2 ax + bx + cx + d = 0 -------------------------- (C)2026 mgr Jerzy Wałaszek a = 1 b = -6 c = 11 d = -6 WYNIKI: Trzy pierwiastki rzeczywiste: x1 = 3.00000 x2 = 1.00000 x3 = 2.00000 Naciśnij Enter... |
JavaScript<html>
<head>
</head>
<body>
<div align="center">
<form name="frmbincode">
<div style="overflow-x: auto;">
<h3>Demonstracja rozwiązywania
równania sześciennego</h3>
ax<sup>3</sup> +
bx<sup>2</sup> +
cx + d = 0<br>
<br>
(C)2006
<nobr>mgr Jerzy Wałaszek</nobr>
<nobr>I LO w Tarnowie</nobr>
</div>
<hr>
<div style="overflow-x: auto;">
Wpisz do pól edycyjnych
kolejne współczynniki
równania<br><br>
<nobr>a = <input
type="text"
name="wsp_a"
size="16"
value="1"
style=
"text-align: right">
</nobr>
<br>
<nobr>b = <input
type="text"
name="wsp_b"
size="16"
value="-6"
style=
"text-align: right">
</nobr>
<br>
<nobr>c = <input
type="text"
name="wsp_c"
size="16"
value="11"
style=
"text-align: right">
</nobr>
<br>
<nobr>d = <input
type="text"
name="wsp_d"
size="16"
value="-6"
style=
"text-align: right">
</nobr>
</div>
<hr>
<div style="overflow-x: auto;">
<input
type="button"
value="Rozwiąż równanie"
name="B1"
onclick="main()">
</div>
<hr>
<div style="overflow-x: auto;"
id="out">
.
</div>
</form>
</div>
<script language=javascript>
// Program rozwiązuje
// równanie sześcienne
//--------------------
// (C)2006 mgr J.Wałaszek
// I LO w Tarnowie
// dokładność porównania z zerem
var EPS = 0.0000000001
// 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))
}
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 = ((3*c/a) - (b*b/a/a))/3
g = (2*b*b*b/a/a/a - 9*b*c/a/a +
27*d/a)/27
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><nobr>x" +
"<sub>1</sub> = " +
x1 + "</nobr><br>" +
"<nobr>x<sub>2</sub> = " +
x2 + "</nobr><br>" +
"<nobr>x<sub>3</sub> = " +
x3 + "</nobr>"
}
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>" +
"<nobr>x<sub>1</sub> = " +
x1 + "</nobr>"
}
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>" +
"<nobr>x<sub>1</sub> = " +
x1 + "</nobr><br>" +
"<nobr>x<sub>2</sub> = " +
x2 + "</nobr><br>" +
"<nobr>x<sub>3</sub> = " +
x3 + "</nobr>"
}
}
document.getElementById("out")
.innerHTML = t;
}
</script>
</body>
</html> |
![]() |
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.