Ez az egyik legegyszerűbb numerikus integrációs módszer, amely a függvény deriváltjának közelítésére épít lineáris interpolációval.
A derivált definíciója alapján:
Az egyenlet átrendezésével:
Az Euler-módszer iteratív képlete: ahol: - (y_n) a megoldás közelítése az (n)-edik lépésben, - (h) az időlépés mérete, - (f(t_n, y_n)) a differenciálegyenlet jobb oldali kifejezése.
def euler_method(f, t0, y0, h, n):
t = t0
y = y0
results =
for _ in range(n):
y += h * f(t, y)
t += h
results.append((t, y))
return results
# Példa differenciálegyenlet: y'(t) = t + y
f = lambda t, y: t + y
# Paraméterek
t0 = 0
y0 = 1
h = 0.1
n = 5
# Számítás
results = euler_method(f, t0, y0, h, n)
print("t, y értékek:")
for t, y in results:
print(f"{t:.1f}, {y:.5f}")
Kimenet:
t, y értékek: 0.0, 1.00000 0.1, 1.10000 0.2, 1.22000 0.3, 1.36200 0.4, 1.52820 0.5, 1.72102
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
vector<pair<double, double>> euler_method(double (*f)(double, double), double t0, double y0, double h, int n) {
double t = t0, y = y0;
vector<pair<double, double>> results = {{t, y}};
for (int i = 0; i < n; ++i) {
y += h * f(t, y);
t += h;
results.push_back({t, y});
}
return results;
}
double f(double t, double y) {
return t + y; // Példa differenciálegyenlet
}
int main() {
// Paraméterek
double t0 = 0, y0 = 1, h = 0.1;
int n = 5;
// Számítás
auto results = euler_method(f, t0, y0, h, n);
// Eredmények kiírása
cout << fixed << setprecision(5);
cout << "t, y értékek:" << endl;
for (const auto& : results) {
cout << t << ", " << y << endl;
}
return 0;
}
Kimenet:
t, y értékek: 0.00000, 1.00000 0.10000, 1.10000 0.20000, 1.22000 0.30000, 1.36200 0.40000, 1.52820 0.50000, 1.72102
Az Euler-módszer egy alapvető, egyszerű numerikus módszer differenciálegyenletek megoldására. Bár alacsony pontossága miatt nem a legmegfelelőbb a precíz számításokhoz, alapvető szerepet játszik a numerikus analízis és az algoritmusok megértésében. Nagyobb pontosság érdekében fejlettebb módszerek, például a Runge-Kutta-módszer alkalmazhatók.