Runge-Kutta-methoden : Documentatie Voor Ontwikkelaars
Deze tekst schetst het ontwerp van de applet en beschrijft kort welke rol de verschillende klassen spelen. Voor meer informatie kan u terecht in de Javadoc of in de broncode (beschikbaar als NetBeans-project).
De klassen in deze applet kunnen opgesplitst worden in drie groepen, naargelang hun functie: model, view en controller. In wat volgt bespreken we deze drie groepen.
Model
Het volgende schema toont de structuur van het model en hoe de klassen verbonden zijn:
RKModel
Zoals blijkt uit het schema is RKModel de hoofdklasse. Een object van deze klasse gebruikt een opgegeven ButcherMatrix om een beginwaardeprobleem met opgegeven ODE op te lossen. Hoewel alle numerieke resultaten onmiddelijk beschikbaar zijn, ondersteunt de klasse RKModel ook een stap-per-stap (trap-per-trap) beeld van de oplossingsmethode: een toestandsvariabele houdt bij in welke toestand het algoritme zich bevindt, ook al zijn alle resultaten reeds beschikbaar. Een RKModel wordt als volgt gebruikt:
/* Maak een nieuw model aan. Specifieer een beginwaardeprobleem en een oplossingsmethode. */ RKModel rkm = new RKModel(anODE, aButcherMatrix); if (! rkm.init(x, y, step)) System.out.println("De opgegeven waarden zijn ongeldig of kunnen niet gebruikt worden met deze ODE."); /* Doorloop alle trappen en los op. * Deze code verandert alleen de toestand van het model en is niet nodig wanneer enkel numerieke resultaten gewenst zijn. */ while(rkm.hasInnerStagesRemaining()) rkm.nextInnerStage(); rkm.outerStage(); /* Haal de resultaten op. */ ...
ODE (en subklassen)
Een subklasse van de abstracte klasse ODE levert informatie over een gewone differentiaalvergelijking en zijn oplossingen. De ODE-klasse heeft bovendien een statische methode getAvailableODEs() die een array van ODE-objecten teruggeeft, eentje uit elke beschikbare subklasse. Enkel deze methode moet gewijzigd worden wanneer nieuwe subklassen worden toegevoegd.
ButcherMatrix (en subklassen)
Op dezelfde manier levert een subklasse van de abstracte klasse ButcherMatrix informatie over een Runge-Kutta-methode, voorgesteld als Butcher-matrix. De ButcherMatrix-klasse heeft een statische methode getAvailableMethods() die een array van ButcherMatrix-objecten teruggeeft, eentje uit elke beschikbare subklasse.
De statische methode getCustomButcherMatrix(double[][] a, double[] b, double[] c) laat de constructie van een eigen Butcher-matrix toe, op basis van gegeven submatrices. Deze methode geeft een object van de klasse CustomButcherMatrix (subklasse van ButcherMatrix) terug.
Views
Het volgende schema toont een overzicht van de klassen die deel uitmaken van de view-groep:
De drie views zijn RKNumPanel, RKAnimationPanel en RKDerivPanel, waarbij de laatste twee hun gemeenschappelijke functionaliteit delen via de superklasse RKDrawing. Merk op dat RKAnimationPanel en RKDerivPanel ook onderling verbonden zijn omdat zij hun animaties op elkaar afstemmen.
De views reageren uiteraard op veranderingen in het model en worden gebruikt om een RKFrame op te bouwen. Een RKApplet toont/verbergt een RKFrame.
Controllers
Het volgende schema toont een overzicht van de klassen die deel uitmaken van de controller-groep:
RKProblemPanel, RKMethodPanel en RKMethodDialog zijn controllers voor het model, terwijl RKColorDialog de kleuren in de RKDrawing-subklassen configureert. RKMethodPanel en RKMethodDialog zijn ook onderling verbonden omdat het paneel de dialoogbox toont/verbergt. Al deze controllers worden uiteraard ook gebruikt door RKFrame (dit staat niet op de figuur).
Verdere informatie is te vinden in de Javadoc en in de broncode.