Serwis Edukacyjny
Nauczycieli I-LO

w Tarnowie
obrazek

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".

Równanie sześcienne

SPIS TREŚCI
Podrozdziały

Algorytm

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:

  1. h > 0 - tylko jeden pierwiastek rzeczywisty (pozostałe dwa są zespolone - liczbami zespolonymi nie zajmujemy się w liceum).
  2. f = 0 i g = 0 - pierwiastek potrójny.
  3. W pozostałym przypadku mamy trzy pierwiastki rzeczywiste.

Jeden pierwiastek rzeczywisty

Jeśli h > 0, pierwiastek wyliczamy ze wzoru:

Pierwiastek potrójny

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:

Trzy pierwiastki rzeczywiste

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:

 


do podrozdziału  do strony 

Opis algorytmu

Specyfikacja problemu

Dane wejściowe

a,b,c,d współczynniki równania ax3 + bx2 + cx + d = 0;
a,b,c,d ∈ R

Dane wyjściowe

x1, x2, x3 poszukiwane pierwiastki oraz informacja o ich
liczbie i typie: jeden pierwiastek rzeczywisty,
pierwiastek potrójny i trzy pierwiastki rzeczywiste.

Zmienne pomocnicze i funkcje

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

Lista kroków

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

do podrozdziału  do strony 

Programy

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>
Demonstracja rozwiązywania
równania sześciennego


ax3 + bx2 + cx + d = 0

   (C)2026 mgr Jerzy Wałaszek I LO w Tarnowie   
Wpisz do pól edycyjnych
kolejne współczynniki równania:

a =
b =
c =
d =

Wyniki:
.

do podrozdziału  do strony 

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: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.