Marko Petek's Thesis application 1.0
The Marko Petek's code for numerical analysis of nonlinear damped and driven oscillation.

IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase Class Reference

Združuje skupne lastnosti vseh vsiljenih nihal: Krožna frekvenca vsiljevanja in perioda vsiljevanja, amplituda dolgoročne rešitve.Metode:Iskanje dolgoročne amplitude, iskanje ekstrema v eni periodi vsiljevanja, natančna določitev ekstrema s pomočjo mini solverja,iskanje ekstrema v mini solverju, izračun resonančne krivulje v odvisnosti od frekvence vsiljevanja. More...

Inheritance diagram for IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase:
Collaboration diagram for IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase:

List of all members.

Public Member Functions

abstract double DrivingFunction (double t)
 Funkcija vsiljevanja, ki jo mora definirati vsako vsiljeno nihalo posebej.
void FindSteadyStateAmplitude ()
 Najde amplitudo nihanja, ko transientni del zamre. Uporabnik mora prej podati le velikost koraka metode Solve(). Začetni pogoji ob neničelnem dušenju za dolgoročno rešitev niso pomembni, zato so kar predpostavljeni: x(0)=0, v(0)=0.Po klicu te metode mora uporabnik za nov zunanji klic Solve() ponovno podati začetne parametre (razen velikosti koraka).
void CalcSteadyStateAmplitudeVsDrivingFrequency ()
 Izračuna resonančno krivuljo. Ta se shrani v tabelo za risanje, ki pripada temu razredu. Uporaba: -podaj želeni splošni solver (npr. DEInitialProblemSolverRK4),-podaj dolžino koraka reševanja NSteps (natančnost metode),-OPTIONAL: spremeni koeficiente DE (parametre: dušenje, amplituda vsiljevanja ...)-podaj začetno in končno krožno frekvenco vsiljevanja:StartingDrivingAngularFrequency, EndingDrivingAngularFrequency.-podaj število točk vzorčenja resonančne krivulje: NSamplesForResonanceCurve.

Public Attributes

const double DefaultGamma = 0.0

Protected Attributes

double _drivingPeriod
 Perioda vsiljevanja. Rabimo jo za enostavnejšo določitev amplitude dolgoročne rešitve.
double _drivingAngularFrequency
 Frekvenca harmonskega vsiljevanja. Za nastavljanje vrednosti uporabi lastnost!
double _gamma = DefaultGamma
 Faza vsiljevanja.
double _steadyStateAmplitude
 Pove amplitudo vsiljenega nihanja po dolgem času, ko transientni del zamre. Ta zamre samo v primeru neničelnega dušenja.
int _stepsInPeriod
 Pove število korakov v periodi. Perioda nihanja je enaka periodi vsiljevanja - ni druge možnosti.
DEInitialProblemSolver _miniPinpointExtremeSolver
 Mini solver za natančno določitev maksimuma. Tabela _solution bo majhna: samo 5 mest za vsak odvod. Spreminjal bom stepSize in začetne pogoje ter vedno natančneje določal lokalni ekstrem: podobno bisekciji.
double _xExtremeTolerance = 0.000001
int _firstPeriodStart
 Spremenljivka uporabna pri iskanju amplitude dolgoročnega stanja. Pove, kje se začne prva perioda, v kateri iščemo ekstrem. Primerjali bomo maksimuma obeh period.
int _secondPeriodStart
 Spremenljivka uporabna pri iskanju amplitude dolgoročnega stanja. Pove, kje se začne druga perioda, v kateri iščemo ekstrem. Primerjali bomo maksimuma obeh period.
double _initialSolvingDepth = 40.0
 Za koliko period vsiljevanja se na začetku izračuna rešitev DE, preden se začne algoritem primerjave dveh sosednih vrhov, oz. iskanje dolgoročne amplitude. Minimalna dovoljena vrednost je 5 period.
double[] _firstExtreme
 Ekstrem prve periode pri iskanju amplitude dolgoročnega stanja. 2D točka.
double[] _secondExtreme
 Ekstrem druge periode pri iskanju amplitude dolgoročnega stanja. 2D točka.
double _consecutivePeaksDifferenceTolerance = 0.000001
 Metoda, ki računa dolgoročno amplitudo in preverja višino dveh zaporednih vrhov, se ustavi, kadar je razlika višin pod to vrednostjo in kadar sta vrha narazen za eno periodo vsiljevanjav okviru te predpisane napake.
double _consecutivePeaksPositionTolerance = 0.01
 Metoda, ki računa dolgoročno amplitudo in preverja časovno razliko med dvema zaporednima vrhoma, se ustavi, kadar sta vrha narazen za eno periodo vsiljevanja v okviru te tolerance in kadar je razlika višin pod vrednostjo _consecutivePeaksDifferenceTolerance.
int _extendSolutionFactor = 10
 Za koliko period se podaljša rešitev potem, ko metoda za iskanje dolgoročne amplitude le-te v prejšnji iteraciji ni našla do želene natančnosti.
int _numOfSolutionExtendIterations = 0
 Kolikokrat se je izvedla zanka, ki podaljša rešitev za npr. 10 perid in ponovno preveri sosedna vrhova. Uporabljeno pri preverjanju konvergence rešitve k ustaljeni amplitudi: pri kateri iteraciji se bo začelo preverjanje.
int _startingIterationsLimit = 50
 z rešitvijo za nekaj period (ponavadi 10), preden se uporabnika vpraša ali naj nadaljuje ali izriše graf rešitve.
int _iterationsLimit
 Meja iteracij, ki se lahko izvedejo pri iskanju dolgoročne amplitude.
int _iterationsLimitIncrement = 10
 Za koliko iteracij naj metoda nadaljuje z iskanjem dolgoročne amplitude, potem ko je dosegla mejo IterationsLimit in se je na to opozorilo uporabnika, ta pa je stisnil enter.
string _usersSolutionExtendDecision
 Ali naj metoda nadaljuje z iskanjem dolgoročne amplitude ali naj se izriše rešitev DE, da lahko uporabnik preveri, če je sploh periodična.
double _originalStepSize
 Uporablja metoda FindSteadyStateAmplitude, ki malo spremeni dolžino koraka in nato povrne original.
int _miniSolverSteps = 7
 Število korakov na mini solverju. Večje kot je, bolj natančno se ekstrem določi v enem reševanju mini solverja.
double _startingDrivingAngularFrequency
 Kje metoda za računanje resonančne krivulje začne.
double _endingDrivingAngularFrequency
 Kje metoda za računanje resonančne krivulje konča.
int _nSamplesForResonanceCurve
 Koiko točk naj vzamem na intervalu vzorčenja resonančne krivulje pri klicu metode, ki izračuna resonančno krivuljo.

Properties

double DrivingPeriod [get]
 Perioda vsiljevanja. Rabimo jo za enostavnejšo določitev amplitude dolgoročne rešitve.
double DrivingAngularFrequency [get, set]
 Frekvenca harmonskega vsiljevanja.
double Gamma [get, set]
 Faza vsiljevanja.
double SteadyStateAmplitude [get]
 Pove amplitudo vsiljenega nihanja po dolgem času, ko transientni del zamre. Ta zamre samo v primeru neničelnega dušenja.
double XExtremeTolerance [get, set]
 Pove kako natančno bo metoda za natančno določanje ekstremov (mini-solver) le-te določila.
double InitialSolvingDepth [get, set]
 Za koliko period vsiljevanja se na začetku izračuna rešitev DE, preden se začne algoritem primerjave dveh sosednih vrhov, oz. iskanje dolgoročne amplitude. Minimalna dovoljena vrednost je 5 period.
double ConsecutivePeaksDifferenceTolerance [get, set]
 Metoda, ki računa dolgoročno amplitudo in preverja višino dveh zaporednih vrhov, se ustavi, kadar je razlika višin pod to vrednostjo in kadar sta vrha narazen za eno periodo vsiljevanjav okviru te predpisane napake.
double ConsecutivePeaksPositionTolerance [get, set]
 Metoda, ki računa dolgoročno amplitudo in preverja časovno razliko med dvema zaporednima vrhoma, se ustavi, kadar sta vrha narazen za eno periodo vsiljevanja v okviru te tolerance in kadar je razlika višin pod vrednostjo _consecutivePeaksDifferenceTolerance.
int ExtendSolutionFactor [get, set]
 v prejšnji iteraciji ni našla do želene natančnosti.
int StartingIterationsLimit [get, set]
 z rešitvijo za nekaj period (ponavadi 10), preden se uporabnika vpraša ali naj nadaljuje ali izriše graf rešitve.
int IterationsLimitIncrement [get, set]
 Za koliko iteracij naj metoda nadaljuje z iskanjem dolgoročne amplitude, potem ko je dosegla mejo IterationsLimit in se je na to opozorilo uporabnika, ta pa je stisnil enter.
int MiniSolverSteps [get, set]
 Število korakov na mini solverju. Večje kot je, bolj natančno se ekstrem določi v enem reševanju mini solverja.
double StartingDrivingAngularFrequency [get, set]
 Kje metoda za računanje resonančne krivulje začne.
double EndingDrivingAngularFrequency [get, set]
 Kje metoda za računanje resonančne krivulje konča.
int NSamplesForResonanceCurve [get, set]
 Koiko točk naj vzamem na intervalu vzorčenja resonančne krivulje pri klicu metode, ki izračuna resonančno krivuljo.
List< double[]> SteadyStateAmplitudeVsDrivingFrequency [get, set]
 Tabela se napolni po klicu metode CalcSteadyStateAmplitudeVsDrivingFrequency().

Private Member Functions

int PlaceOfExtremeInPeriod (int periodStart)
 Najde mesto ekstrema v izbrani periodi - na katerem koraku v periodi leži, vendar vrne njegovo absolutno pozicijo v tabeli _solution.
double[] PinpointExtreme (int placeOfExtreme)
 Najde pozicijo ekstrema do želene natančnosti _xExtremeTolerance po načelu bisekcije (operiramo s petimi točkami za večjo zanesljivost).
int PlaceOfExtremeInMiniSolver (ref DEInitialProblemSolver miniSolver)

Private Attributes

DrivenPendulumBaseStates _dpStates
bool _placeOfExtremeInPeriodFailed = false
 Pove, če se je metoda PlaceOfExtremeInPeriod izvedla do konca.
List< double[]> _steadyStateAmplitudeVsDrivingFrequency
 Tabela se napolni po klicu metode CalcSteadyStateAmplitudeVsDrivingFrequency().

Detailed Description

Združuje skupne lastnosti vseh vsiljenih nihal:

Krožna frekvenca vsiljevanja in perioda vsiljevanja, amplituda dolgoročne rešitve.

Metode:

Iskanje dolgoročne amplitude, iskanje ekstrema v eni periodi vsiljevanja, natančna določitev ekstrema s pomočjo mini solverja,

iskanje ekstrema v mini solverju, izračun resonančne krivulje v odvisnosti od frekvence vsiljevanja.


Member Function Documentation

abstract double IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::DrivingFunction ( double  t) [pure virtual]
void IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::FindSteadyStateAmplitude ( ) [inline]

Najde amplitudo nihanja, ko transientni del zamre. Uporabnik mora prej podati le velikost koraka metode Solve(). Začetni pogoji ob neničelnem dušenju za dolgoročno rešitev niso pomembni, zato so kar predpostavljeni: x(0)=0, v(0)=0.Po klicu te metode mora uporabnik za nov zunanji klic Solve() ponovno podati začetne parametre (razen velikosti koraka).

int IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::PlaceOfExtremeInPeriod ( int  periodStart) [inline, private]

Najde mesto ekstrema v izbrani periodi - na katerem koraku v periodi leži, vendar vrne njegovo absolutno pozicijo v tabeli _solution.

Parameters:
periodStartNa katerem koraku v tabeli _solution se izbrana perioda začne.
Returns:
Mesto ekstrema v tabeli _solution.
double [] IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::PinpointExtreme ( int  placeOfExtreme) [inline, private]

Najde pozicijo ekstrema do želene natančnosti _xExtremeTolerance po načelu bisekcije (operiramo s petimi točkami za večjo zanesljivost).

Parameters:
placeOfExtremeMesto x ekstrema v tabeli _solution.
Returns:
int IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::PlaceOfExtremeInMiniSolver ( ref DEInitialProblemSolver  miniSolver) [inline, private]
void IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::CalcSteadyStateAmplitudeVsDrivingFrequency ( ) [inline]

Izračuna resonančno krivuljo. Ta se shrani v tabelo za risanje, ki pripada temu razredu. Uporaba: -podaj želeni splošni solver (npr. DEInitialProblemSolverRK4),-podaj dolžino koraka reševanja NSteps (natančnost metode),-OPTIONAL: spremeni koeficiente DE (parametre: dušenje, amplituda vsiljevanja ...)-podaj začetno in končno krožno frekvenco vsiljevanja:StartingDrivingAngularFrequency, EndingDrivingAngularFrequency.-podaj število točk vzorčenja resonančne krivulje: NSamplesForResonanceCurve.


Member Data Documentation

Perioda vsiljevanja. Rabimo jo za enostavnejšo določitev amplitude dolgoročne rešitve.

Frekvenca harmonskega vsiljevanja. Za nastavljanje vrednosti uporabi lastnost!

Pove amplitudo vsiljenega nihanja po dolgem času, ko transientni del zamre. Ta zamre samo v primeru neničelnega dušenja.

Pove število korakov v periodi. Perioda nihanja je enaka periodi vsiljevanja - ni druge možnosti.

Mini solver za natančno določitev maksimuma. Tabela _solution bo majhna: samo 5 mest za vsak odvod. Spreminjal bom stepSize in začetne pogoje ter vedno natančneje določal lokalni ekstrem: podobno bisekciji.

Spremenljivka uporabna pri iskanju amplitude dolgoročnega stanja. Pove, kje se začne prva perioda, v kateri iščemo ekstrem. Primerjali bomo maksimuma obeh period.

Spremenljivka uporabna pri iskanju amplitude dolgoročnega stanja. Pove, kje se začne druga perioda, v kateri iščemo ekstrem. Primerjali bomo maksimuma obeh period.

Za koliko period vsiljevanja se na začetku izračuna rešitev DE, preden se začne algoritem primerjave dveh sosednih vrhov, oz. iskanje dolgoročne amplitude. Minimalna dovoljena vrednost je 5 period.

Ekstrem prve periode pri iskanju amplitude dolgoročnega stanja. 2D točka.

Ekstrem druge periode pri iskanju amplitude dolgoročnega stanja. 2D točka.

Metoda, ki računa dolgoročno amplitudo in preverja višino dveh zaporednih vrhov, se ustavi, kadar je razlika višin pod to vrednostjo in kadar sta vrha narazen za eno periodo vsiljevanjav okviru te predpisane napake.

Metoda, ki računa dolgoročno amplitudo in preverja časovno razliko med dvema zaporednima vrhoma, se ustavi, kadar sta vrha narazen za eno periodo vsiljevanja v okviru te tolerance in kadar je razlika višin pod vrednostjo _consecutivePeaksDifferenceTolerance.

Za koliko period se podaljša rešitev potem, ko metoda za iskanje dolgoročne amplitude le-te v prejšnji iteraciji ni našla do želene natančnosti.

Kolikokrat se je izvedla zanka, ki podaljša rešitev za npr. 10 perid in ponovno preveri sosedna vrhova. Uporabljeno pri preverjanju konvergence rešitve k ustaljeni amplitudi: pri kateri iteraciji se bo začelo preverjanje.

z rešitvijo za nekaj period (ponavadi 10), preden se uporabnika vpraša ali naj nadaljuje ali izriše graf rešitve.

Meja iteracij, ki se lahko izvedejo pri iskanju dolgoročne amplitude.

Za koliko iteracij naj metoda nadaljuje z iskanjem dolgoročne amplitude, potem ko je dosegla mejo IterationsLimit in se je na to opozorilo uporabnika, ta pa je stisnil enter.

Ali naj metoda nadaljuje z iskanjem dolgoročne amplitude ali naj se izriše rešitev DE, da lahko uporabnik preveri, če je sploh periodična.

Uporablja metoda FindSteadyStateAmplitude, ki malo spremeni dolžino koraka in nato povrne original.

Pove, če se je metoda PlaceOfExtremeInPeriod izvedla do konca.

Število korakov na mini solverju. Večje kot je, bolj natančno se ekstrem določi v enem reševanju mini solverja.

Kje metoda za računanje resonančne krivulje začne.

Kje metoda za računanje resonančne krivulje konča.

Koiko točk naj vzamem na intervalu vzorčenja resonančne krivulje pri klicu metode, ki izračuna resonančno krivuljo.


Property Documentation

double IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::DrivingPeriod [get]

Perioda vsiljevanja. Rabimo jo za enostavnejšo določitev amplitude dolgoročne rešitve.

double IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::DrivingAngularFrequency [get, set]

Frekvenca harmonskega vsiljevanja.

double IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::Gamma [get, set]

Faza vsiljevanja.

double IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::SteadyStateAmplitude [get]

Pove amplitudo vsiljenega nihanja po dolgem času, ko transientni del zamre. Ta zamre samo v primeru neničelnega dušenja.

double IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::XExtremeTolerance [get, set]

Pove kako natančno bo metoda za natančno določanje ekstremov (mini-solver) le-te določila.

double IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::InitialSolvingDepth [get, set]

Za koliko period vsiljevanja se na začetku izračuna rešitev DE, preden se začne algoritem primerjave dveh sosednih vrhov, oz. iskanje dolgoročne amplitude. Minimalna dovoljena vrednost je 5 period.

double IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::ConsecutivePeaksDifferenceTolerance [get, set]

Metoda, ki računa dolgoročno amplitudo in preverja višino dveh zaporednih vrhov, se ustavi, kadar je razlika višin pod to vrednostjo in kadar sta vrha narazen za eno periodo vsiljevanjav okviru te predpisane napake.

double IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::ConsecutivePeaksPositionTolerance [get, set]

Metoda, ki računa dolgoročno amplitudo in preverja časovno razliko med dvema zaporednima vrhoma, se ustavi, kadar sta vrha narazen za eno periodo vsiljevanja v okviru te tolerance in kadar je razlika višin pod vrednostjo _consecutivePeaksDifferenceTolerance.

int IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::ExtendSolutionFactor [get, set]

v prejšnji iteraciji ni našla do želene natančnosti.

int IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::StartingIterationsLimit [get, set]

z rešitvijo za nekaj period (ponavadi 10), preden se uporabnika vpraša ali naj nadaljuje ali izriše graf rešitve.

int IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::IterationsLimitIncrement [get, set]

Za koliko iteracij naj metoda nadaljuje z iskanjem dolgoročne amplitude, potem ko je dosegla mejo IterationsLimit in se je na to opozorilo uporabnika, ta pa je stisnil enter.

int IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::MiniSolverSteps [get, set]

Število korakov na mini solverju. Večje kot je, bolj natančno se ekstrem določi v enem reševanju mini solverja.

double IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::StartingDrivingAngularFrequency [get, set]

Kje metoda za računanje resonančne krivulje začne.

double IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::EndingDrivingAngularFrequency [get, set]

Kje metoda za računanje resonančne krivulje konča.

int IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::NSamplesForResonanceCurve [get, set]

Koiko točk naj vzamem na intervalu vzorčenja resonančne krivulje pri klicu metode, ki izračuna resonančno krivuljo.

List<double[]> IG::MPetekLib::Algorithms::SpecificSolver::DrivenPendulumBase::SteadyStateAmplitudeVsDrivingFrequency [get, set, private]

Tabela se napolni po klicu metode CalcSteadyStateAmplitudeVsDrivingFrequency().


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Enumerations Properties