Marko Petek's Thesis application 1.0
The Marko Petek's code for numerical analysis of nonlinear damped and driven oscillation.
|
Public Member Functions | |||
abstract void | SolvingAlgorithm () | ||
Specifična meroda reševanja DE, ki jo implementira vsak dedič posebej. Uporabi se znotraj starševske metode Solve. Podati moramo tabelo rešitev, v katero bo algoritem zapisoval. | |||
void | PrepareForSolving () | ||
Nastavi velikost koraka, število korakov. Nastavi vsa stanja. | |||
void | Solve () | ||
Metoda, ki reši DE - zapolni tabelo rešitev z vrednostmi. Tukaj so definirane pričakovane operacije vsakega solverja (inicializacija tabele rešitev, izračun števila korakov...)Po teh operacijah se kliče specifični algoritem reševanja (npr. RK4), ki mora biti definiran v vsakem dediču posebej. | |||
void | CalculateErrors () | ||
Izračuna napake tako, da primerja rešitev pri trenutni dolžini koraka z rešitvijo pri pol manjši dolžini koraka. | |||
void | PostProcessErrors (int pointsPerDomain) | ||
Najprej izračuna absolutne vrednosti napak. Potem poskuša zgladiti krivuljo (uporabno če ta oscilira).
| |||
void | VerifyErrorsValidity (int checkNeighborhood) | ||
Izračuna še rešitve pri različnih velikostih koraka. Velikosti koraka se druga od druge razlikujejo za nek celoštevilski faktor (ponavadi 2). Potem izračuna za vsako od teh rešitev še napake in pri vsaki shrani največjo napako. Razlike napak nato zaporedomadeli med seboj. Ti členi morajo težiti proti konstanti povezani z redom metode. | |||
void | PrintResults (TextWriter writer) | ||
Prints the solution the specified text writer. | |||
void | PrintResults (string filePath) | ||
Prints the solution to the specified file. If the file exists then it is overwritten. | |||
void | PrintResults () | ||
Prints solution to the console. | |||
void | PrintResultsOld () | ||
Public Attributes | |||
double | _stepSize | ||
Velikost koraka metode. To polje uporabljaj v kodi, uporabnik naj uporablja lastnost. | |||
int | _nSteps | ||
Število korakov reševanja na podanem intervalu neodvisne spremenljivke. | |||
List< double[]> | _solution | ||
Dvostopenjska tabela namenjena risanju rešitve. Po klicu Solve() vsebuje rešene vrednosti razmaknjene v enakomernih korakih za neodvisno spremenljivko.Oblika: [ [x0,f(0),f'(0),f''(0)], [x(1),f(1),f'(1),f''(1)], [x(2),f(2),f'(2),f''(2)], ... ]Po ocenitvi napak lahko ta tabela vsebuje tudi kaj drugega. | |||
int | _solutionSize | ||
Celo število, ki pove velikost tabele, ki nosi vse podatke na nekem koraku reševanja: [x0,f(0),f'(0),f''(0)] ---> Velikost je enaka: Red(DE) + 2. | |||
SolverStates | _state | ||
Stanje v katerem se solver nahaja (kateri parametri so podani, katere metode so že bile klicane ...) | |||
Protected Attributes | |||
double[] | _initialConditions | ||
Začetni pogoji, oz. vse vrednosti odvodov, funkcije same in neodvisne spremenljivke na ničtem koraku. Primer za enačbo II. reda: [x, f, f', f'']. Velikost tabele je torej enaka: Red(DE) + 2.Sicer rabimo pri reševanju DE samo toliko začetnih pogojev, kot je red DE.Da ne kompliciramo, se tukaj manjkajoča vrednost (npr. f'') izračuna in vnese kar ročno. | |||
double | _endPoint | ||
Končna vrednost neodvisne spremenljivke, do katere bomo DE reševali. Npr. končni čas. | |||
List< string > | _solveVariableNames | ||
Imena spremenljivk vezana na metodo Solve (imena spremenljivk DE). Uporabnik mora to polje nujno podati. | |||
List< string > | _variableNames | ||
Imena spremenljivk trenutne tabele Solution. Uporabno, če se splošni solver uporablja samostojno in se riše kar iz njega. Uporabnik tega polja ne podaja. | |||
HighestDerivativeFunctionDelegate | _highestDerivative | ||
Instanca delegata, ki Solver veže z ustrezno DE definirano v razredu DifferentialEquations. | |||
int | _solvingMethodOrder | ||
Red metode s katero rešujemo DE. Red se poda komaj v specifičnem algoritmu reševanja: SolvingAlgorithm(). | |||
List< double[]> | _originalSolution | ||
Shramba. Vsebuje rešitev, ki je nastala ob zadnjem klicu Solve(). Ta seznam uporablja CalculateErrors, saj se znotraj nje ponovno kliče Solve() in se stara rešitev prepiše. | |||
List< double[]> | _errors | ||
int | _errorEstimateCoefficient = 2 | ||
Koeficient geometrijskega zaporedja, ki pove delilnik med zaporednima velikostima koraka. | |||
Properties | |||
virtual string | Name [get] | ||
Ime grafa. | |||
double[] | InitialConditions [get, set] | ||
Začetni pogoji, oz. vse vrednosti odvodov, funkcije same in neodvisne spremenljivke na ničtem koraku. Primer za enačbo II. reda: [x, f, f', f'']. Velikost tabele je torej enaka: Red(DE) + 2.Sicer rabimo pri reševanju DE samo toliko začetnih pogojev, kot je red DE.Da ne kompliciramo, se tukaj manjkajoča vrednost (npr. f'') izračuna in vnese kar ročno. | |||
double | EndPoint [get, set] | ||
Končna vrednost neodvisne spremenljivke, do katere bomo DE reševali. Npr. končni čas. | |||
double | StepSize [get, set] | ||
Velikost koraka metode. To lastnost naj uporablja uporabnik, v kodi uporabljaj polje. | |||
int | NSteps [get, set] | ||
Število korakov reševanja na podanem intervalu neodvisne spremenljivke. | |||
List< double[]> | Solution [get, set] | ||
Dvostopenjska tabela namenjena risanju rešitve. Po klicu Solve() vsebuje rešene vrednosti razmaknjene v enakomernih korakih za neodvisno spremenljivko.Oblika: [ [x0,f(0),f'(0),f''(0)], [x(1),f(1),f'(1),f''(1)], [x(2),f(2),f'(2),f''(2)], ... ]Po ocenitvi napak lahko ta tabela vsebuje tudi kaj drugega. | |||
List< string > | SolveVariableNames [get, set] | ||
Imena spremenljivk vezana na metodo Solve (imena spremenljivk DE). Uporabnik mora to polje nujno podati. | |||
List< string > | VariableNames [get, set] | ||
Imena spremenljivk trenutne tabele Solution. Uporabno, če se splošni solver uporablja samostojno in se riše kar iz njega. Uporabnik tega polja ne podaja. | |||
HighestDerivativeFunctionDelegate | HighestDerivative [get, set] | ||
Instanca delegata, ki Solver veže z ustrezno DE definirano v razredu DifferentialEquations. | |||
SolverStates | State [get, set] | ||
Stanje v katerem se solver nahaja (kateri parametri so podani, katere metode so že bile klicane ...) |
abstract void IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::SolvingAlgorithm | ( | ) | [pure virtual] |
Specifična meroda reševanja DE, ki jo implementira vsak dedič posebej. Uporabi se znotraj starševske metode Solve. Podati moramo tabelo rešitev, v katero bo algoritem zapisoval.
Implemented in IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolverRK4.
void IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::PrepareForSolving | ( | ) | [inline] |
Nastavi velikost koraka, število korakov. Nastavi vsa stanja.
void IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::Solve | ( | ) | [inline] |
Metoda, ki reši DE - zapolni tabelo rešitev z vrednostmi. Tukaj so definirane pričakovane operacije vsakega solverja (inicializacija tabele rešitev, izračun števila korakov...)Po teh operacijah se kliče specifični algoritem reševanja (npr. RK4), ki mora biti definiran v vsakem dediču posebej.
void IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::CalculateErrors | ( | ) | [inline] |
Izračuna napake tako, da primerja rešitev pri trenutni dolžini koraka z rešitvijo pri pol manjši dolžini koraka.
void IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::PostProcessErrors | ( | int | pointsPerDomain | ) | [inline] |
Najprej izračuna absolutne vrednosti napak. Potem poskuša zgladiti krivuljo (uporabno če ta oscilira).
pointsPerDomain | Če bi bila funkcija monotona, bi se izbralo toliko točk v enakomernih razmikih. |
void IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::VerifyErrorsValidity | ( | int | checkNeighborhood | ) | [inline] |
Izračuna še rešitve pri različnih velikostih koraka. Velikosti koraka se druga od druge razlikujejo za nek celoštevilski faktor (ponavadi 2). Potem izračuna za vsako od teh rešitev še napake in pri vsaki shrani največjo napako. Razlike napak nato zaporedomadeli med seboj. Ti členi morajo težiti proti konstanti povezani z redom metode.
checkNeighborhood | Kolikokrat naj metoda za nek fiksen faktor zmanjša dolžino koraka. |
void IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::PrintResults | ( | TextWriter | writer | ) | [inline] |
Prints the solution the specified text writer.
writer |
void IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::PrintResults | ( | string | filePath | ) | [inline] |
Prints the solution to the specified file. If the file exists then it is overwritten.
filePath | Path of the file where solution is written. |
void IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::PrintResults | ( | ) | [inline] |
Prints solution to the console.
void IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::PrintResultsOld | ( | ) | [inline] |
double [] IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::_initialConditions [protected] |
Začetni pogoji, oz. vse vrednosti odvodov, funkcije same in neodvisne spremenljivke na ničtem koraku. Primer za enačbo II. reda: [x, f, f', f'']. Velikost tabele je torej enaka: Red(DE) + 2.Sicer rabimo pri reševanju DE samo toliko začetnih pogojev, kot je red DE.Da ne kompliciramo, se tukaj manjkajoča vrednost (npr. f'') izračuna in vnese kar ročno.
double IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::_endPoint [protected] |
Končna vrednost neodvisne spremenljivke, do katere bomo DE reševali. Npr. končni čas.
Velikost koraka metode. To polje uporabljaj v kodi, uporabnik naj uporablja lastnost.
Število korakov reševanja na podanem intervalu neodvisne spremenljivke.
Dvostopenjska tabela namenjena risanju rešitve. Po klicu Solve() vsebuje rešene vrednosti razmaknjene v enakomernih korakih za neodvisno spremenljivko.Oblika: [ [x0,f(0),f'(0),f''(0)], [x(1),f(1),f'(1),f''(1)], [x(2),f(2),f'(2),f''(2)], ... ]Po ocenitvi napak lahko ta tabela vsebuje tudi kaj drugega.
Celo število, ki pove velikost tabele, ki nosi vse podatke na nekem koraku reševanja: [x0,f(0),f'(0),f''(0)] ---> Velikost je enaka: Red(DE) + 2.
List<string> IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::_solveVariableNames [protected] |
Imena spremenljivk vezana na metodo Solve (imena spremenljivk DE). Uporabnik mora to polje nujno podati.
List<string> IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::_variableNames [protected] |
Imena spremenljivk trenutne tabele Solution. Uporabno, če se splošni solver uporablja samostojno in se riše kar iz njega. Uporabnik tega polja ne podaja.
HighestDerivativeFunctionDelegate IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::_highestDerivative [protected] |
Instanca delegata, ki Solver veže z ustrezno DE definirano v razredu DifferentialEquations.
Red metode s katero rešujemo DE. Red se poda komaj v specifičnem algoritmu reševanja: SolvingAlgorithm().
List<double[]> IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::_originalSolution [protected] |
List<double[]> IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::_errors [protected] |
int IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::_errorEstimateCoefficient = 2 [protected] |
Koeficient geometrijskega zaporedja, ki pove delilnik med zaporednima velikostima koraka.
Stanje v katerem se solver nahaja (kateri parametri so podani, katere metode so že bile klicane ...)
virtual string IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::Name [get] |
Ime grafa.
Implements IG::MPetekLib::Algorithms::Plotter::IPlottable.
Reimplemented in IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolverRK4.
double [] IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::InitialConditions [get, set] |
Začetni pogoji, oz. vse vrednosti odvodov, funkcije same in neodvisne spremenljivke na ničtem koraku. Primer za enačbo II. reda: [x, f, f', f'']. Velikost tabele je torej enaka: Red(DE) + 2.Sicer rabimo pri reševanju DE samo toliko začetnih pogojev, kot je red DE.Da ne kompliciramo, se tukaj manjkajoča vrednost (npr. f'') izračuna in vnese kar ročno.
double IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::EndPoint [get, set] |
Končna vrednost neodvisne spremenljivke, do katere bomo DE reševali. Npr. končni čas.
double IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::StepSize [get, set] |
Velikost koraka metode. To lastnost naj uporablja uporabnik, v kodi uporabljaj polje.
int IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::NSteps [get, set] |
Število korakov reševanja na podanem intervalu neodvisne spremenljivke.
List<double[]> IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::Solution [get, set] |
Dvostopenjska tabela namenjena risanju rešitve. Po klicu Solve() vsebuje rešene vrednosti razmaknjene v enakomernih korakih za neodvisno spremenljivko.Oblika: [ [x0,f(0),f'(0),f''(0)], [x(1),f(1),f'(1),f''(1)], [x(2),f(2),f'(2),f''(2)], ... ]Po ocenitvi napak lahko ta tabela vsebuje tudi kaj drugega.
Implements IG::MPetekLib::Algorithms::Plotter::IPlottable.
List<string> IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::SolveVariableNames [get, set] |
Imena spremenljivk vezana na metodo Solve (imena spremenljivk DE). Uporabnik mora to polje nujno podati.
List<string> IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::VariableNames [get, set] |
Imena spremenljivk trenutne tabele Solution. Uporabno, če se splošni solver uporablja samostojno in se riše kar iz njega. Uporabnik tega polja ne podaja.
Implements IG::MPetekLib::Algorithms::Plotter::IPlottable.
HighestDerivativeFunctionDelegate IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::HighestDerivative [get, set] |
Instanca delegata, ki Solver veže z ustrezno DE definirano v razredu DifferentialEquations.
SolverStates IG::MPetekLib::Algorithms::Solver::DEInitialProblemSolver::State [get, set] |
Stanje v katerem se solver nahaja (kateri parametri so podani, katere metode so že bile klicane ...)