算一算不见的狗狗在哪里?
这个其实是个数学建模的问题,我最近也给同学们讲了这个问题和解决思路。 问题描述:一只小狗跑丢了,主人很伤心,想知道小狗是往哪个方向跑的,能走多远。
问题简化:设狗开始位置为x=0,方向为v=(cosθ, sinθ),则其位移为x=vt, 时间间隔内长度为L=∫(0→t)|x'(t)|dt=∫(0→t)\sqrt{1+v^2} dt =\frac{\sqrt{1+ v_0^2}}{\sqrt{2}} t ,只要知道开始时刻的速度v_0和方向的余弦和正切,就可以计算出位移大小了。 但是这里存在一个问题,因为是没有看到狗的,所以无法得到开始的姿态,即方向上的信息,而仅仅知道了狗在移动,也就是速度的大小,这会导致最终得到的位移是一个带有未知参数的方程,无法真正确定实际的位置。要解决这个问题,就需要加入一些假设,比如下图中,我把这条狗近似成一条直线,那么最初的状态可以用一个角度加一个正弦函数近似表示出来。这样一开始的问题就转化成了求解一个带有多个未知数的方程组的问题,利用初值(初始角度和速度)就可以求解。
如果只要求大致的方向,而不需要精准的坐标,那么可以把这条线简化成一个点,问题就转化成了求解一个有未知数个数小于未知量个数的代数方程组,这是可以求解的。不过这种求解方法是需要添加额外的条件的,不然会得不到具体的解。我的课上介绍了两种常用的近似方法,一种是用最小二乘法,通过迭代的方式把误差平方和最小化来求得近似解;还有一种方法是泰勒展开,根据导数的概念将其展开然后配参数,这也是我当时课堂上给同学演示的方法。
如果还需要精准的坐标,那么就只能用基于几何的概念进行求解了。简单来说就是过终点作垂线,垂线与起点连线的交点就是未知点,利用这两个点就可以求解未知点的坐标了。不过这种情况下,未知数的个数依然大于未知量个数,是没法通过方程组直接求解的,需要借助于外部的知识。由于本题中,已知起点和终点的坐标(或者可以认为是过这两点的直线方程),所以可以利用两点间距离公式将待求的未知点的坐标转化为两个已知量的函数,从而可以通过求导计算出未知点的坐标。