|
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
|
| SPIS TREŚCI |
|
| Podrozdziały |
Metoda siecznych ( ang. secant method ) jest ulepszeniem metody regula falsi. Warunki początkowe są zatem podobne:
Na osi OX wybieramy pewien przedział [a,b] o następujących własnościach:

Dodatkowo w przedziale [a,b] pierwsza pochodna funkcji jest różna od zera. Warunek ten gwarantuje nam, iż w tym przedziale funkcja nie posiada minimum/maksimum lokalnego, a co za tym idzie jej sieczna nie będzie równoległa do osi OX, ponieważ algorytm bazuje na znajdowaniu punktów przecięcia siecznych z osią OX.
W przedziale [a,b] spełniającym warunki początkowe metody wybieramy dwa punkty początkowe x1 i x2, które leżą w tym przedziale. Będą to dwa pierwsze przybliżenia pierwiastka:

Z punktów wykresu o współrzędnych (x1,f(x1)) i (x2,f(x2)) prowadzimy sieczną i wyznaczamy punkt x3, który jest punktem przecięcia tej siecznej z osią OX:

Do wyznaczenia punktu x3 stosujemy ten sam wzór, co w metodzie regula falsi:

Sprawdzamy, czy w wyznaczonym punkcie wartość funkcji jest dostatecznie bliska zeru. Jeśli tak, to kończymy z wynikiem x3. Jeśli nie, to za nowe przybliżenia przyjmujemy dwa ostatnie x2 i x3 i kontynuujemy obliczenia wg tej samej metody:


Wzory możemy uogólnić:

Metoda siecznych jest zwykle szybko zbieżna do pierwiastka funkcji. Jednak po wybraniu złych punktów początkowych może się zdarzyć, iż nie będzie ona zbieżna. Dlatego należy zastosować licznik kolejnych przybliżeń, a po przekroczeniu zadanej ich liczby algorytm powinien zatrzymać się z błędem.
Istnieją dwa warunki poprawnego zakończenia obliczeń:
| εx | – | dokładność przybliżenia pierwiastka |
| εy | – | dokładność przybliżenia do zera |
| x1,x2 | – | początkowe przybliżenia pierwiastka |
| f | – | funkcja, której pierwiastek będzie obliczany |
| n | – | maksymalna liczba aproksymacji |
| xn | – | przybliżony pierwiastek funkcji |
| f1,f2 | – | wartości funkcji w punktach x1 i x2 |
| fn | – | wartość funkcji w punkcie xn |
| K01: | f1 ← f ( x1 ) f2 ← f ( x2 ) |
Obliczamy wartości funkcji w podanych punktach startowych |
| K02: | Jeśli n = 0, to zakończ z błędem inaczej n ← n - 1 |
Sprawdzamy licznik obiegów |
| K03: | ![]() |
Wyznaczamy punkt przecięcia siecznej z osią OX |
| K04: | fn ← f ( xn ) | Obliczamy wartość funkcji w wyznaczonym punkcie przecięcia |
| K05: | Jeśli ( | fn | < εy
)
lub (| xn
- x2 | < εx), to zakończ |
Sprawdzamy warunek zakończenia |
| K06: | x1 ← x2, f1
← f2 x2 ←xn, f2 ← fn |
Uaktualniamy dwa ostatnie przybliżenia |
| K07: | Idź do kroku K02 | Kontynuujemy obliczenia w następnym obiegu pętli. |
Poniższy program jest przykładową realizacją algorytmu siecznych. Program oblicza pierwiastek funkcji:

Wykres tej funkcji w przedziale [-3,1] jest następujący:

Z wykresu wynika, iż pierwiastek znajduje się w przedziale [-1,1 , -1]. Jako przybliżenia początkowe wybieramy krańce tego przedziału.
|
Przykładowy program w języku C++
// Pierwiastek funkcji - metoda siecznych
// (C)2019 mgr Jerzy Wałaszek
// Metody numeryczne
//------------------------------------------
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
// Tutaj definiujemy funkcję, której pierwiastek jest wyliczany
//-------------------------------------------------------------
double f(double x)
{
return sin(x*x-x+1/3.0)+0.5*x;
}
// Tutaj definiujemy parametry początkowe
double epsx = 1e-14; // Dokładność wyznaczania pierwiastka
double epsy = 1e-14; // Dokładność wyznaczania zera
double x1 = -1.1; // Punkty startowe
double x2 = -1.0;
int n = 64; // Maksymalna liczba obiegów
// Program główny
//---------------
int main()
{
// Zmienne
double f1,f2,fn,xn;
bool result = false; // Zmienna informująca o poprawnym zakończeniu metody
setlocale(LC_ALL,"");
cout << setprecision(15) << fixed;
cout << "Obliczanie przybliżonego pierwiastka funkcji metodą siecznych" << endl
<< "-------------------------------------------------------------" << endl << endl;
// Obliczamy i zapamiętujemy wartości funkcji na krańcach przedziału [a,b]
f1 = f(x1);
f2 = f(x2);
while(--n)
{
// Obliczamy punkt przecięcia siecznej z osią OX
xn = (f1 * x2 - f2 * x1) / (f1 - f2);
// Obliczamy wartość funkcji w punkcie przecięcia
fn = f(xn);
// sprawdzamy warunki zakończenia
if((fabs(fn) < epsy) || (fabs(xn - x2) < epsx))
{
result = true;
break;
}
// Uaktualniamy przybliżenia
x1 = x2; f1 = f2;
x2 = xn; f2 = fn;
}
if(!result) cout << "Przekroczono liczbę obiegów !!!" << endl << endl;
cout << "Pierwiastek xn = " << setw(18) << xn << endl
<< "Wartość funkcji f(xn) = " << setw(18) << fn << endl
<< "Dokładność dla x epsx = " << setw(18) << epsx << endl
<< "Dokładność dla y epsy = " << setw(18) << epsy << endl
<< "Liczba obiegów = " << 64 - n;
cout << endl << endl;
return 0;
}
|
| Wynik |
| Obliczanie przybliżonego pierwiastka
funkcji metodą siecznych ------------------------------------------------------------- Pierwiastek xn = -1.077713513691340 Wartość funkcji f(xn) = 0.000000000000000 Dokładność dla x epsx = 0.000000000000010 Dokładność dla y epsy = 0.000000000000010 Liczba obiegów = 5 |
Porównaj otrzymany wynik z dwiema poprzednimi metodami:
|
Obliczanie przybliżonego pierwiastka funkcji metodą
bisekcji ------------------------------------------------------------ Pierwiastek x0 = -1.077713513691339 Wartość funkcji f(x0) = 0.000000000000002 Dokładność dla x epsx = 0.000000000000010 Dokładność dla y epsy = 0.000000000000010 Liczba obiegów i = 44 |
|
Obliczanie przybliżonego pierwiastka funkcji metodą
regula falsi ---------------------------------------------------------------- Pierwiastek x0 = -1.077713513691339 Wartość funkcji f(x0) = 0.000000000000001 Dokładność dla y epsy = 0.000000000000010 Liczba obiegów = 9 |
![]() |
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.