Przykład:

Równanie różniczkowe zwyczajne - jedna zmienna niezależna
Rząd równania - rząd najwyższej pochodnej

Szukamy funkcji
Rozwiązanie numeryczne: wartość funkcji w węzłach

Równanie różniczkowe zwyczajne rzędu pierwszego warunek początkowy

Wartości funkcji w kolejnych punktach ze stałym krokiem

Błąd lokalny (pojedynczego kroku) - proporcjonalny do

Błąd globalny - akumuluje błędy z wszystkich kroków, można pokazać, że jest proporcjonalny do

Im mniejszy krok tym lepsza dokładność metody ale dla bardzo małych zaczynają dominować błędy zaokrągleń

Rozwiążmy problem początkowy

Rozwiązanie analityczne jest postaci

#include <stdio.h> #include <math.h> double f(double t, double y) { return y; } int main() { double h=0.1, y, t; int i; t=0.0; y = 1.0; printf("t Euler Exact\n"); for (i=0; i<= 10; i++) { printf("%lf %lf %lf\n", t, y, exp(t)); y=y+h*f(t, y); t=t+h; } return 0; }

Metoda midpoint

Metoda Heuna

Metoda Ralstona

Napisz program, który rozwiąże równanie różniczkowe z warunkiem początkowym .
Zaimplementuj rozwiązanie z użyciem 3 metod: Heuna , midpoint i Ralstona.
Dla podanej przez użytkownika liczby zastosowanych przedziałów program wypisuje wartości funkcji wyznaczonych w równoodległych węzłach na odcinku . Dla każdego węzła wyznacz i wypisz błąd bezwzględny oraz błąd względny metody, wiedząc że dokładne rozwiązanie jest postaci .

Ćw. 1