A Newton-módszer lépései
1. Kezdeti közelítés: Válasszunk ki egy kezdeti közelítést, amely közel áll a keresett gyökérhez.
2. Iteratív lépés: A következő közelítést az alábbi képlettel számítjuk ki:
ahol a függvény deriváltja az pontban.
3. Folyamatos iteráció: Ismételjük meg a 2. lépést, amíg közelítése nem éri el a kívánt pontosságot (pl. , ahol egy kis pozitív szám).
Előnyök - Gyors konvergencia: A Newton-módszer általában gyorsan konvergál, különösen, ha a kezdeti közelítés közel van a valós gyökhöz. - Alkalmazhatóság: A módszer bármilyen differenciálható függvényre alkalmazható, amennyiben a deriváltja nem nulla a gyök körüli pontokban.
Hátrányok - Kezdeti közelítés érzékenysége: Ha a kezdeti közelítés nem megfelelő, a módszer nem mindig konvergálhat, vagy a nem kívánt gyökérhez vezethet. - Derivált szükségessége: A módszer igényli a függvény deriváltját, amely nem mindig könnyen meghatározható. - Több gyökér esetén: Ha a keresett gyökér többszörös, a konvergencia lassabb lehet.
Példa Legyen . Az gyökének keresésére alkalmazzuk a Newton-módszert:
1. Kezdeti közelítés: 2. Derivált: 3. Iteráció:
- -
Ismételjük meg az iterációt, amíg a kívánt pontosságot elérjük.
A Newton-módszer egy iteratív numerikus eljárás, amelyet a nemlineáris egyenletek gyökeinek meghatározására vagy függvények minimumának/maximumának keresésére használnak. Az algoritmus gyorsan konvergál a gyökökhöz, ha a kezdőérték elég közel van a tényleges megoldáshoz.
Adott egy (f(x) = 0) egyenlet, ahol (f(x)) egy folytonosan deriválható függvény. A Newton-módszer a lineáris közelítést használja az iterációs folyamat során.
Az iterációs képlet:
A Newton-módszer gyorsan konvergál, ha: 1. A kezdőérték ((x_0)) elég közel van a gyökhez. 2. A (f(x)) függvény deriváltja ((f’(x))) nem nullázódik ki a gyök környezetében. 3. A függvény kétszer deriválható a gyök környezetében.
Oldjuk meg a (f(x) = x^2 - 2 = 0) egyenletet Newton-módszerrel (() kiszámítása):
Tegyük fel, hogy (x_0 = 1).
Az eredmény ( ).
def newton_method(f, df, x0, tol=1e-6, max_iter=100):
x = x0
for _ in range(max_iter):
fx = f(x)
dfx = df(x)
if abs(fx) < tol:
return x
if dfx == 0:
raise ValueError("A derivált nullával egyenlő, nem lehet osztani.")
x -= fx / dfx
raise ValueError("A módszer nem konvergált a maximális iterációk alatt.")
# Példa függvény: f(x) = x^2 - 2
f = lambda x: x**2 - 2
df = lambda x: 2 * x
# Kezdőérték
x0 = 1.0
# Eredmény
root = newton_method(f, df, x0)
print(f"A gyök: {root}")
Kimenet:
A gyök: 1.4142135623746899
#include <iostream>
#include <cmath>
#include <stdexcept>
using namespace std;
double newton_method(double (*f)(double), double (*df)(double), double x0, double tol = 1e-6, int max_iter = 100) {
double x = x0;
for (int i = 0; i < max_iter; ++i) {
double fx = f(x);
double dfx = df(x);
if (abs(fx) < tol) {
return x;
}
if (dfx == 0) {
throw runtime_error("A derivált nullával egyenlő, nem lehet osztani.");
}
x -= fx / dfx;
}
throw runtime_error("A módszer nem konvergált a maximális iterációk alatt.");
}
double f(double x) {
return x * x - 2;
}
double df(double x) {
return 2 * x;
}
int main() {
double x0 = 1.0; // Kezdőérték
try {
double root = newton_method(f, df, x0);
cout << "A gyök: " << root << endl;
} catch (const exception& e) {
cerr << "Hiba: " << e.what() << endl;
}
return 0;
}
Kimenet:
A gyök: 1.41421
A Newton-módszer egy gyors és hatékony numerikus eljárás, amelyet széles körben használnak matematikai, mérnöki és tudományos alkalmazásokban. Bár kezdőértéktől függően instabil lehet, megfelelő kezdeti közelítéssel az egyik leghatékonyabb módszer nemlineáris egyenletek megoldására.