17 double _omega0, _phi0, _amplitude;
33 inline X900(
double m,
double k,
double x0,
double v0)
41 _omega0 = sqrt(k / mass);
42 _amplitude = sqrt(pow(x0, 2) + pow(v0 / _omega0, 2));
43 _phi0 = atan2(_omega0 * x0, v0);
50 inline double omega0()
const {
return _omega0; }
56 inline double phi0()
const {
return _phi0; }
62 inline double amplitude()
const {
return _amplitude; }
69 inline double phase(
double t)
const {
return omega0() * t + _phi0; }
76 inline double x(
double t)
const {
return _amplitude * sin(
phase(t)); }
83 inline double v(
double t)
const {
92 inline double a(
double t)
const {
93 return -_amplitude * pow(
omega0(), 2) * sin(
phase(t));
101 inline double force(
double x)
const {
return -k *
x; }
129 int odefn(
double t,
const double yin[],
double yout[]) {
140 Ode ode{ *
this, 1e-2, 1e-9, 0 };
145 double t = 0.0, dt = 0.01;
146 while (t <= 1.5 * _period) {
147 _data += { t, ode[0], ode[1],
force(ode[0]) };
153 for (
auto &crow : _data.
data()) {
154 const auto x = crow[1];
155 const auto v = crow[2];
157 crow[5] = 0.5 *
k * pow(
x, 2);
158 crow[6] = crow[4] + crow[5];
167 std::stringstream id;
168 id << std::setprecision(3) <<
omega0() <<
"-" <<
phi0();
182 const double mass = 1.0,
k = 100.0;
184 const double x0 = 1.0,
v0 = 0.0;
static double kinetic_energy(double mass, double velocity)
kinetic_energy Hilfsfunktion
double amplitude() const
amplitude
The X900 class Harmonische Schwingung eines Feder-Massen-Systems (Modellklasse)
double phase(double t) const
phase
void set_init_conditions(double t, const Array &y)
set_init_conditions lege Anfangsbedingungen fest
double force(double x) const
force Kraft
double v(double t) const
v Geschwindigkeit
The Odeiv2 class numerische Lösung eines Systems von N Differenzialgleichungen Schnittstelle zur gsl...
The XModel class Basisklasse speichert eine ID in Form einer Zeichenkette enthält Hilfsfunktionen zur...
double omega0() const
omega0
void run()
run Harmonische Schwingung eines Feder-Massen-Systems Berechnung von Beispieldaten ...
The X900 class Harmonische Schwingung eines Feder-Massen-Systems (Rechenmodell)
const auto & data() const
data lesender Zugriff auf die interne Struktur
double x(double t) const
x Auslenkung
int odefn(double t, const double yin[], double yout[])
odefn Bewegungsgleichung als System von Differenzialgleichungen erster Ordnung
auto select_total_rows(size_t n, size_t start=0, bool l=true) const
get_total_rows generiere View mit eine Instanz vom Typ View bestimmter Anzahl von Spalten ...
static void save(const T &data, Format fmt)
save Speicherung von Daten in eine Datei
void exec()
solve_ode numerische Lösung der Bewegungsgleichungen
static constexpr double PI
double a(double t) const
a Beschleunigung
static const Format latex
static void all(const std::string &s, std::initializer_list< bool > lst)
input teste mehrere Bedingungen auf einmal
void save_data()
save_data schreibe Daten in Dateien (LaTeX und CSV)
X900(double m, double k, double x0, double v0)
X900.