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
    v(i=0) = 0
    a(i=0) = 9.81
    y(i=0) = 1000
    
    for (i = 1; i <= 1000; i++) {
        v(i) = v(i-1) + a(i-1)
        a(i) = 10 - 27 / 65 * (v(i))^2
        y(i) = y(i-1) - v(i)
    }
  • 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
            v = [0]; //ein Array mit 0 als erstem Element, index = 0
            a = [9.81]; // ein Array mit 9.81 als erstem Element, index = 0
            y = [1000]; // ein Array mit 1000 als erstem Element, index = 0
            for (i = 1; i <= 1000; i++) {
                v[i] = v[i - 1] + a[i - 1];
                a[i] = 10 - 27 / 65 * v[i] * v[i];
                y[i] = y[i - 1] - v[i];
            }
            console.log(v, a, y);

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

    Code
    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:


  • 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).

  • 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
    F_arr [ 637.65, 595.4625, 595.4625, 574.3687500000001, 637.65, 616.5562500000001, 511.0875, 489.99375000000003, 553.275, 532.1812500000001, … ]
     
    v_arr [ 0, 0.916096153846154, 1.832192307692308, 2.715836538461539, 3.6968365384615387, 4.645384615384616, 5.431673076923078, 6.185509615384616, 7.036701923076924, 7.855442307692309, … ]
     
    a_arr [ 9.81, 9.160961538461539, 9.160961538461539, 8.836442307692309, 9.81, 9.48548076923077, 7.8628846153846155, 7.5383653846153855, 8.511923076923077, 8.187403846153847, … ]
     
    y_arr [ "1000", 999.9083903846154, 999.7251711538461, 999.4535874999999, 999.0839038461537, 998.6193653846152, 998.0761980769229, 997.4576471153844, 996.7539769230767, 995.9684326923075, … ]
     
    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.

    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

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!