Runge-Kutta-Verfahren
-
Hallo,
ich wollte gerade meine Klassen zum Lösen gewöhnlicher DGL'en überarbeiten, dazu gehören auch Runge-Kutta-Verfahren:
\par u\_0 = y\_0 \par u_{j+1} = u\_j + h \sum\_{i=1}^m A\_i k\_i \par k\_1 = f(t\_j, y_j) \par k\_2 = f(t\_j + a\_2 h, u\_j + h b_{21}k_1) \par k\_3 = f(t\_j + a\_3 h, u\_j + h(b_{31}k\_1 + b\_{32}k_2) \par ... \par k\_m = f(t\_j + a\_m h, u\_j + h \sum_{i=1}^{m-1} b_{mi}k_i) \parAllerdings will ich für die verschiedenen Verfahren nicht immer alles neu schreiben, deshalb habe ich das bis jetzt so gelöst:
template <typename T> class KuttaNystroem { protected: static const size_t order; static const T A[]; static const T a[]; static const T b[]; }; template <typename T> const size_t KuttaNystroem<T>::order = 6; template <typename T> const T KuttaNystroem<T>::A[] = { ... }; template <typename T> const T KuttaNystroem<T>::a[] = { ... }; template <typename T> const T KuttaNystroem<T>::b[] = { ... }; //------------------------------ template <typename T> class England1 { ... }Und die Implementierung des Verfahrens:
template < typename T, template<typename> class Method = ClassicRK > class RungeKutta : public Method<T> { ... };Ist das so sinnvoll, oder könnte man das irgendwie besser lösen? Wie würdet ihr das machen? Es geht mir vor allem die Speicherung der Koeffizienten.
Danke im voraus!