模拟的可视化主要基于Geogebra实现。Geogebra演示能力强,操作大部分是交互式的,少量的代码和函数只是让它潜能更大。Geogebra的数值计算方法的能力之强,远超出了常人对一个几何类软件本该有的期望。——这就是为何选择Geogebra作模拟的工具。
进行简单数值模拟,涉及一些数值计算。复杂和可用解析求解验算的,不妨借助代数符号计算方面的工具完成。
不过计算过程之中,碰上解析的解不存在、而geogebra的计算又力所不能及的情况,仍然留有遗憾。虽然可以在其它软件里面计算离散点,拟合出反函数,但是这个笨办法比较笨拙,不是首选。
充分利用已知条件和假设,简化建模,然后找切入点
势能到动能的转化:
求 v 的水平方向分量:
所以,切线方向即速度方向和如下向量相同
所以,速度 v(x0) 沿水平和垂直方向分解,则速度水平分量的大小是:
则在 x 附近跑完足够小的水平距离微元 dx 所用时间:
不对速度进行分解,则利用弧长的微分,相除之后积分得到相同结果:
弧长微分:
把 (2) 代入,直接得到跟 (4) 等价的结果:
这意味着,沿曲线运动的小球运动到水平位置的坐标为 x0 处时, 时间用掉了 τ(x0) , 一直沿着水平方向运动的小球在同一时间走过的水平方向的路程是 v0⋅τ(x0) , 公式也容易看到一般情况下 v0⋅τ(x0)≠x0 。
一般情况下,不指望能求出这个积分的解析解,数值解则是容易的。——即使这么简单的问题的计算,也要对相对复杂的被积函数求数值积分。被积函数虽然复杂,但是性质很好,所以这种数值积分的任务在Geogebra里面可以轻松完成。
然而,给定时间 t ,是否能够得到解析形式的沿曲线的小球水平方向上走了多远 x(t) ?看似合理的要求,求一个积分函数 (4) 的反函数又有些不近情理。
为什么在模拟中,由给定的时间计算沿曲线运动的小球的位置是重要的?因为模拟的是小球的运动或动力学,其运动状态要随着时间的演化作演示。
——之前的演示是如何实现的?是让沿曲线运动的小球在 x 方向的位移均匀变化的情况下实现的(从而,这个假的模拟用的伪时间,跟真正的时间之间并非线性关系)。
此外,如果只是从单纯模拟的角度考虑,可以对 (4) 计算出密密麻麻的一系列 (x,τ) ,不妨叫它 (x,τ) 表;我们当年查三角函数表、对数表、概率统计问题的分布表,跟这个原理就非常类似。(题外话:我一直不理解,大学的有些老师们,在各种类似WPS和MS Excel 等spreadsheet数学类工具软件内置函数都很强大的情况下,不教软件而仍然只强调这些表格的重要性,这是为什么;难道不该淘汰这些东西吗)然后用查表和 插值的方法可以轻松实现逆函数的数值近似。但是这种方法,初值每变化一次,都要对 (x,τ) 表格从新计算。理想的情况下当然是能够有Geogebra计算能力之内的解析解。(这个任务,在mathematica, maple, matlab等里面是可以通过迭代方法实现的,不过geogebra还没这么厉害)
为了解决这个问题,还有一种思路是:喊救命,求助。——因为我经常这么做,已经很有经验了,分享一下。
我通常的第一选项是,stackexchange.com 上面发问题,等集思广益。既然还跟Geogebra的局限性有关,当然第二选项是到Geogebra的Forum上提问,但是这两天,这个geogebra.org又只有翻了才能稳定地连接上,这大大降低了效率。我很生气,但是后果不严重。
看了半天计算,这个简单例子,定性分析受力情况也应该想象得到。然而,定量计算跟定性结果的对比,让我对这个例子的理解前所未有的深入。知道了简化模型的局限所在,也知道了计算的局限,以及原始的案例要想实现,哪些条件须满足,甚至,如果涉及到更复杂些的情况,如何分析等等。
计算是笨拙的,只能对简化了的情形。计算又很有用,即使简化了的情形,也能让人了解更多更深入。
终于有点空闲,更新一下。表格其实跟离散点齐次多项式拟合效果相似。用齐次多项式拟合,然后,修正之前的图。初速度分别为 3、5、12的情况下,小球约束在曲线 1+cosx 上运动的动画。注意: 要想让小球自由滚动,而不发生平抛,临界速度约 10−−√≈3.16 :
初始速度为3 ,必然不会平抛的情况下,沿曲线运动的小球,水平位置一直超前于沿水平直线运动前进的小球:
初始速度为5 ,速度稍微大于临界速度 10−−√ ,无其它约束(在曲线上)的话,一开始会有平抛;有约束的时候,约束力和重力的合力的水平分量方向跟小球水平运动方向相反,为减速力。这导致沿曲线运动的红色小球,最初阶段其水平位移落后于沿水平直线运动前进的蓝色小球,从模拟图也可以看到:
当初始速度高于临界值很多,为12 的时候,红色小球水平方向的总体的滞后就分外明显了:
这三个图中,我用常数项为0的多项式拟合特定时刻红色小球的水平方向位移,即:如下函数的反函数,在图示所须的区间上,用多项式拟合求得:
之后在Geogebra中就很容易计算了。——这是动态图中蓝色小球终于是匀速运动的了。之前的其实是变速的,用于模拟时,红色小球和蓝色小球运动状况都不够逼真。