F#还能干点啥
距离上一次更新已经过去了很久(40分钟之久!),这段时间我在学习F#,并且在工作(划掉,躺肥并没有工作要做)中使用F#。
那干点啥呢?还是老本行吧,搞点飞行力学。
有一个球(质点),在一维平面大地、真空两个假设条件下,以一定的初始速度和初始角度抛出,求其运动轨迹。什么?这也是飞行力学?当然是啊,飞行力学不就是研究物体在空间中的运动吗?我假设真空怎么了?我假设一维平面大地怎么了?我假设球是质点怎么了?还不是飞行力学啊!
扔石头就是最早的飞行力学应用!……好吧,我承认是我说的。但是,不能因为是我说的就说不对啊!
问题超级简单,球的位置可以用一个二维向量表示,速度也可以用一个二维向量表示,那么问题就是求解一个二阶微分方程组:
d2r⃗dt2=a⃗ \frac{d^2\vec{r}}{dt^2} = \vec{a} \\ dt2d2r=a
拆成一阶微分方程组就是:
{
dxdt=vxdvxdt=0dydt=vydvydt=−g \begin{cases} \frac{dx}{dt} = v_x \\ \frac{dv_x}{dt} = 0 \\ \frac{dy}{dt} = v_y \\ \frac{dv_y}{dt} = -g \end{cases} ⎩
⎨
⎧dtdx=vxdtdvx=0dtdy=vydtdvy=−g
其中ggg是重力加速度,g=9.8m/s2g=9.8m/s^2g=9.8m/s2。在时刻t=0t=0t=0有,球的位置和速度分别为:r⃗0=[x0,y0]T\vec{r}_0=[x_0, y_0]^Tr0=[x0,y0]T和v⃗0=[vx0,vy0]T\vec{v}_0=[v_{x0}, v_{y0}]^Tv0=[vx0,vy0]T。问题的解析解是:
{ x=vx0t+x0vx=vx0y=−12gt2+vy0t+y0vy=−gt+vy0 \begin{cases} x = v_{x0}t + x_0 \\ v_x = v_{x0} \\ y = -\frac{1}{2}gt^2 + v_{y0}t + y_0 \\ v_y = -gt + v_{y0} \end{cases} ⎩