如何应用速度和加速度来匹配数学公式的结果
How do I apply velocity and acceleration to match the result of math formulas
所以我有一个初始速度iv
一个最终速度fv
(始终为0)一个时间t
和一个加速度变量a
我使用这些变量来计算最终距离fd
注意:这里使用的语言是 Kotlin
注意:计算fd
和a
的公式不是我想出来的
var iv = 10.0 // initial velocity
var fv = 0.0 // final velocity
var t = 8.0 // time
var a = ((fv - iv)/t) // acceleration
var fd: Double = ((iv*t) + (a/2.0*Math.pow(t,2.0)))
我得到的结果是 fd = 40.0
当我尝试以这种方式建模时,我会尝试在代码中应用它。
var d = 0.0 // current distance traveled
var i = 0 // current time elapsed
while (i < t) {
d += v
v += a
i++
}
当 d
最后应该等于 fd
时,我得到了 d = 45.0
的结果。
我在将速度和加速度应用于速度时做错了什么,以至于我的结果与数学公式显示的结果不同?
不要担心“公式”——想想物理学。
如果你学过微积分和物理学,你就会知道:
a = dv/dt // a == acceleration; v == velocity; t == time
v = ds/dt // v == velocity; s == distance; t == time
如果你足够了解微积分,你可以对加速度方程进行两次积分以获得作为时间函数的行进距离:
a(t) = dv/dt = a0
v(t) = ds/dt = a0*t + v0
s(t) = (a0/2)*t^2 + v0*t + s0
你可以计算常数:
a0 = -1.25 m/sec^s
v0 = 10 m/s
s0 = 0 m
替代:
a(t) = -1.25
v(t) = 10 - 1.25*t
s(t) = -0.625*t^2 + 10*t = (10 - 0.625*t)*t
你也可以用数字计算答案。这就是您使用 Kotlin 所做的。
如果你知道初始条件
a(0), v(0), and s(0)
你可以像这样计算时间增量 dt 结束时的值:
a(t+dt) = f(t+dt)
v(t+dt) = v(t) + a(t)*dt
s(t+dt) = s(t) + v(t)*dt
看来您假设加速度在您感兴趣的整个时间内是恒定的。
你没有说你使用的是什么单位。我将采用公制单位:以米为单位的长度和以秒为单位的时间。
您在 8 秒内从初始速度 10 m/sec 减速到最终速度 0 m/second。这意味着 -1.25 m/sec^2.
的恒定加速度
您应该能够将值代入这些方程式并获得您需要的答案。
在尝试编写代码之前先手动进行计算。
所以我有一个初始速度iv
一个最终速度fv
(始终为0)一个时间t
和一个加速度变量a
我使用这些变量来计算最终距离fd
注意:这里使用的语言是 Kotlin
注意:计算fd
和a
的公式不是我想出来的
var iv = 10.0 // initial velocity
var fv = 0.0 // final velocity
var t = 8.0 // time
var a = ((fv - iv)/t) // acceleration
var fd: Double = ((iv*t) + (a/2.0*Math.pow(t,2.0)))
我得到的结果是 fd = 40.0
当我尝试以这种方式建模时,我会尝试在代码中应用它。
var d = 0.0 // current distance traveled
var i = 0 // current time elapsed
while (i < t) {
d += v
v += a
i++
}
当 d
最后应该等于 fd
时,我得到了 d = 45.0
的结果。
我在将速度和加速度应用于速度时做错了什么,以至于我的结果与数学公式显示的结果不同?
不要担心“公式”——想想物理学。
如果你学过微积分和物理学,你就会知道:
a = dv/dt // a == acceleration; v == velocity; t == time
v = ds/dt // v == velocity; s == distance; t == time
如果你足够了解微积分,你可以对加速度方程进行两次积分以获得作为时间函数的行进距离:
a(t) = dv/dt = a0
v(t) = ds/dt = a0*t + v0
s(t) = (a0/2)*t^2 + v0*t + s0
你可以计算常数:
a0 = -1.25 m/sec^s
v0 = 10 m/s
s0 = 0 m
替代:
a(t) = -1.25
v(t) = 10 - 1.25*t
s(t) = -0.625*t^2 + 10*t = (10 - 0.625*t)*t
你也可以用数字计算答案。这就是您使用 Kotlin 所做的。
如果你知道初始条件
a(0), v(0), and s(0)
你可以像这样计算时间增量 dt 结束时的值:
a(t+dt) = f(t+dt)
v(t+dt) = v(t) + a(t)*dt
s(t+dt) = s(t) + v(t)*dt
看来您假设加速度在您感兴趣的整个时间内是恒定的。
你没有说你使用的是什么单位。我将采用公制单位:以米为单位的长度和以秒为单位的时间。
您在 8 秒内从初始速度 10 m/sec 减速到最终速度 0 m/second。这意味着 -1.25 m/sec^2.
的恒定加速度您应该能够将值代入这些方程式并获得您需要的答案。
在尝试编写代码之前先手动进行计算。