JS-Rechenschleife für numerisches Problem

  • Guten Abend,


    ich (Mathematiker) verzweifle an einer Rechenschleife in JavaScript, die Beschleunigung, Geschwindigkeit und Höhe eines fallenden Objektes für jeden Moment (i) aus dem vorherigen Moment (i-1) berechnet. Wie kann das klappen? Schön wäre es, wenn man die Ergebnisse für alle v(i), a(i) und y(i) mit zugehörigem i-Wert als Vektoren bzw. Arrays speichern könnte...:/ VG

    Code
    1. v(i=0) = 0
    2. a(i=0) = 9.81
    3. y(i=0) = 1000
    4. for (i = 1; i <= 1000; i++) {
    5. v(i) = v(i-1) + a(i-1)
    6. a(i) = 10 - 27 / 65 * (v(i))^2
    7. y(i) = y(i-1) - v(i)
    8. }

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von Sandyrmo ()

  • Anscheinend hast Du dich nicht über Arrays in Javascript informiert. Ich habe mal versucht, deinen Code, so gut ich ihn verstehe, in Javascript umzusetzen:

    Code
    1. v = [0]; //ein Array mit 0 als erstem Element, index = 0
    2. a = [9.81]; // ein Array mit 9.81 als erstem Element, index = 0
    3. y = [1000]; // ein Array mit 1000 als erstem Element, index = 0
    4. for (i = 1; i <= 1000; i++) {
    5. v[i] = v[i - 1] + a[i - 1];
    6. a[i] = 10 - 27 / 65 * v[i] * v[i];
    7. y[i] = y[i - 1] - v[i];
    8. }
    9. console.log(v, a, y);

    Allerdings kriege ich die Formel nicht so hin, dass die Ergebnisse plausibel sind. Auch wenn ich Klammern setze:

    Code
    1. a[i] = 10 - 27 / (65 * v[i] * v[i]);

    wird es anders aber ebenso wenig plausibel. Da ist dann der Physiker gefragt.

  • Allerdings kriege ich die Formel nicht so hin, dass die Ergebnisse plausibel sind.

    Ich auch nicht...?(

    Bei mir sind die ersten gerundeten Ergebnisse


    v = [0, 9.81, 15.94, 21.39, 23.5]

    a = [9.81, 6.14, 5.46, 2.11, 2.78]

    y = [1000, 990.19, 974.25, 952.86, 929.36]


    mit diesem Code:


    Dieser Beitrag wurde bereits 2 Mal editiert, zuletzt von Sandyrmo ()

  • Ich habe da mal was gebastelt.

    Weil das aber mit der Tabelle und Copy & Paste ins Forum nicht klappen, habe ich das als Dateianhang beigefügt.


    Die Daten sind mit PHP erstellt; falls das Ergebnis plausibel ist, wäre das auch leicht in JavaScript umzusetzen.


    Screenshot-2017-12-4.png

  • Leider sind die Werte nicht plausibel.

    Ok, das war jetzt auch nur der freie Fall mit einer Fallbeschleunigung von 9,81 Meter pro Quadratsekunde und in der sichtbaren Tabelle meterweise bis 191 Meter Fallhöhe die Angaben für gefallene Meter, verstrichene Zeit in Sekunden und aktuelle Fallgeschwindigkeit in Meter pro Sekunde.


    Da habe ich wohl die Problemstellung noch nicht erkannt.

  • Ok, das war jetzt auch nur der freie Fall mit einer Fallbeschleunigung von 9,81 Meter pro Quadratsekunde ..

    Ah verstehe!

    Ich wollte mit Luftwiderstand rechnen, weshalb bei meinen Werten (m = 65 kg, k = 21.77 kg/m) keine höheren Geschwindigkeiten als 6 m/s rauskommen sollten.:P

    Leider weiß ich nicht, was mein Script dazu verleitet für v Werte wie 26 m/s rauszuhauen.:/

  • Wie sind denn deine Variablen zugeordnet? v ist ja allgemein die Geschwindigkeit. Wenn das bei dir auch der Fall ist, ist schon die erste Zeile in der for-Schleife falsch, weil der zweite (nach 0 als erstem Wert) 9,81 m/s bei 1m wäre; ohne Luftwiderstand sollten es ca. 4,4 m/s sein.

    Rechne ich aber weiter die zweite Zeile in der for-Schleife:

    a[i] = 9.81 - k / m * ((v[i])^2);

    = 9,81 - 21,77 / 65 * 9,812

    = 9,81 - 0,3349... * 96,2361

    = 9,81 - 32,231...

    a[i] = -22,421690723076923076923076923077


    Ausserdem wird in der Funktion die Variable h verwendet, die nirgends definiert ist. Anzunehmen ist, dass es die Höhe sein soll; in der Funktion ist der Wert aber 0.


    Für y würde ich annehmen, dass es ein "Höhen-Array" sein soll ? Dann wird von dem die Geschwindigkeit abgezogen ?

  • v = Geschwindigkeit

    a = Beschleunigung

    y = Höhe


    Ausserdem wird in der Funktion die Variable h verwendet, die nirgends definiert ist. Anzunehmen ist, dass es die Höhe sein soll;

    Ups, mein Fehler. In meiner HTML-Datei ist die Höhe h natürlich definiert (1000 m).

    Für y würde ich annehmen, dass es ein "Höhen-Array" sein soll ? Dann wird von dem die Geschwindigkeit abgezogen ?

    Genau, von der Höhe des vorherigen Moments y[i-1] wird die momentane Geschwindigkeit v[i] abgezogen (die eigentlich noch mit einem Zeitschritt delta t multipliziert wird, delta t ist vorerst aber 1).

  • Auf der Suche nach der richtigen Formel bin ich auf dieses gestoßen

    Guter Tipp! Das habe ich auch schon entdeckt.

    Notfalls baue ich darauf auf, aber erst wenn ich weiß, warum mein Weg (noch) nicht funktioniert:|

    Ideen?

  • Für die ersten acht Zeitschritte (delta t = 0.1 s) sollte in etwa Folgendes rauskommen:


    v = [0, 0.981, 1.929, 2.785, 3.506, 4.075, 4.4998, 4.803]

    a = [9.81, 9.488, 8.563, 7.212, 5.693, 4.248, 3.028, 2.084]

    y = [1000, 999.902, 999.709, 999.431, 999.080, 998.673, 998.223, 997.743]

  • Okay, ich habe das Ganze mal nach Sempervivums Quelle umgeschrieben.

    Die Arrays sehen in der Konsole gut aus, allerdings sind die Werte immer noch nicht realistisch.:wacko:

    Code: Konsolenausgabe
    1. F_arr [ 637.65, 595.4625, 595.4625, 574.3687500000001, 637.65, 616.5562500000001, 511.0875, 489.99375000000003, 553.275, 532.1812500000001, … ]
    2. v_arr [ 0, 0.916096153846154, 1.832192307692308, 2.715836538461539, 3.6968365384615387, 4.645384615384616, 5.431673076923078, 6.185509615384616, 7.036701923076924, 7.855442307692309, … ]
    3. a_arr [ 9.81, 9.160961538461539, 9.160961538461539, 8.836442307692309, 9.81, 9.48548076923077, 7.8628846153846155, 7.5383653846153855, 8.511923076923077, 8.187403846153847, … ]
    4. y_arr [ "1000", 999.9083903846154, 999.7251711538461, 999.4535874999999, 999.0839038461537, 998.6193653846152, 998.0761980769229, 997.4576471153844, 996.7539769230767, 995.9684326923075, … ]
    5. t_arr [ 0, "00.1", "00.10.1", "00.10.10.1", "00.10.10.10.1", "00.10.10.10.10.1", "00.10.10.10.10.10.1", "00.10.10.10.10.10.10.1", "00.10.10.10.10.10.10.10.1", "00.10.10.10.10.10.10.10.10.1", … ]

    Hat keiner eine Idee weshalb?

  • Bohr ey.Ihr könnt nicht nur gut Scripten,sondern auch Rechnen.Also ich hätte davon überhaupt keine ahung.Wozu brauch man auch im normalen leben fallbeschleunigung.?

  • Bohr ey.Ihr könnt nicht nur gut Scripten,sondern auch Rechnen.

    Scripten kann ich auch nicht gut, deshalb bitte ich ja um Hilfe.:P

    Die Fallbeschleunigung ist insofern interessant, als der Unterschied zwischen "mit Luftwiderstand" und "ohne Luftwiderstand" beim Fallschirmspringen enorm ist. (Teilweise fällt man ohne mehr als doppelt so schnell)<X