#include int main() { // Federkonstante const double k1 = 1; const double k2 = 0.7; const double kc = 0.2; // Zeitschritt const double dt = 0.01; // (Start-)Position double x1 = 0.3; double x2 = 0.2; // (Start-)Geschwindigkeit double v1 = 0.0; double v2 = 0.0; // zu simulierende Zeit double T = 100.0; // Kraft auf die Masse double F1 = -k1*x1 - kc*(x1-x2); double F2 = -k2*x2 - kc*(x2-x1); printf("#t\tx1\tx2\te1\te2\tec\te\n"); for (double t = 0.0; t < T; t+= dt) { // Velocity-Verlet-Algorithmus // Geschwindigkeits-Halbschritt v1 += 0.5*F1*dt; v2 += 0.5*F2*dt; // neue Position x1 += v1*dt; x2 += v2*dt; // neue Kraft F1 = -k1*x1 - kc*(x1-x2); F2 = -k2*x2 - kc*(x2-x1); // zweiter Geschwindigkeits-Halbschritt v1 += 0.5*F1*dt; v2 += 0.5*F2*dt; t += dt; // kinetische Energie double e1 = 0.5*v1*v1 + 0.5*k1*x1*x1; double e2 = 0.5*v2*v2 + 0.5*k2*x2*x2; double ec = 0.5*kc*(x1-x2)*(x1-x2); // Gesamtenergie double e = e1+e2+ec; printf("%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\n", t, x1, x2, e1, e2, ec, e); } }