|
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:
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.
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
|
| 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; overflow-y: hidden;">
<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; overflow-y: hidden;">
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; overflow-y: hidden;">
<input
type="button"
value="Rozwiąż równanie"
name="B1"
onclick="main()">
</div>
<hr>
<div style="overflow-x: auto; overflow-y: hidden;"
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.