Was ich will: Ich habe ein Gummiseil, das ist lang, wenn es nicht belastet wird, und kann sich strecken (Zu lang). Ich möchte eine konstante Masse horizontal beschleunigen, die eine vernachlässigbare Reibung hat. Ich hätte gerne eine Funktion, die mir die Geschwindigkeit der Masse in Abhängigkeit von der Zeit sagt, also zum Beispiel Geschwindigkeit nach der Freigabe.
Was ich getan habe: Ich habe einige Messungen der Kräfte des Seils durchgeführt, wenn ich es auf verschiedene Längen gezogen habe. Natürlich beim Ziehen (Gesamtlänge ) Ich habe eine Kraft von . Hier ist eine Grafik meiner Ergebnisse.
: Verschiebung eines Seilendes
: gemessene Kraft
Ich konnte auch eine Regression durchführen und fand eine Funktion, die beschreibt, wie viel Kraft ich bekomme, nachdem ich eine bestimmte Länge gezogen habe. Ich nenne diese Funktion für wegabhängige Kraft. Daraus ist es einfach, die Beschleunigungsfunktion zu erhalten, die ist mit des Objekts, das ich beschleunigen möchte. Aber jetzt stecke ich fest. Ich muss irgendwie kommen anstatt , also die Beschleunigung nach Zeit, nicht nach Länge, also kann ich das dann integrieren, um das zu bekommen .
Wie konvertiere ich die Abhängigkeit der Funktion?
Sie möchten sicherlich Ihre Bewegungsgleichung angesichts Ihres Ausdrucks der Kraft numerisch integrieren.
Ich gehe davon aus, dass die Masse wird an einer Seite des Seils befestigt, während die andere Seite an einer Wand oder etwas befestigt wird, das sich während der Integration nicht bewegt. So etwas, wo die Feder eigentlich dein Seil ist, mit die Verlängerung des Seils
Dann können Sie die Gleichung einfach integrieren (z. B. mit dem Euler-Schema).
##################################################
## Integration using Euler (mid-point) method knowing position x and speed xp=\dot{x}
##################################################
def integration(x,xp)
dxp = force(x)*@dt
dx = (xp+dxp/2)*@dt
return x+dx,xp+dxp
end
##################################################
## Force expression knowing position x
##################################################
def force(x)
return -10*x
end
##################################################
## Effective integration loop
##################################################
@dt = 0.001 # time increment
t = 0 # initial time
x = 5 # initial position
xp= 0 # initial speed
10000.times do |i|
t += @dt
x,xp = integration(x,xp)
puts "#{t}\t#{x}\t#{xp}"
end
Stecken Sie einfach Ihre Anfangsbedingungen ein und erzwingen Sie den Ausdruck Ihrer Messungen, und Sie haben sowohl Position als auch Geschwindigkeit im Laufe der Zeit (NB: Ich habe genommen
in meinem Code, aber Sie können den richtigen Wert an beliebiger Stelle in der integration
Funktion oder in der force
Funktion [die dann in "Beschleunigung" umbenannt werden soll]) hinzufügen.
Sie können es auch verfeinern, um über eine konstante Gesamtzeit zu integrieren und weniger Ergebnisse auszugeben, als Sie Integrationsschritte haben (Präzisionssteigerung mit kleineren Integrationsschritten, @dt
aber es kann schwierig werden, zu zeichnen, wenn Sie eine Million Punkte haben, nur um bei der Integration präziser zu sein).
Wenn die Beschleunigung eine Funktion der Position ist, verwenden Sie Folgendes
was gelöst ist .
Die Position wird aus gefunden
was gelöst ist .
Beispiel
Wenn bei Dann oder
Dann
und wann , Dann oder
Wenn Ihre Masse war Dann im Diagramm u
Benutzer23224
Winterfell
Benutzer23224