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) \par

    Allerdings 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!


Anmelden zum Antworten