高等数学问题的数值解(2)--近似计算函数导数

例:甲、乙、丙、丁4个人分别位于起始位置(-200,200)、(200,200)、(200,-200)以及(-200,200)处(单位:米),并且以恒定的速率1m/s行走。在行走过程中,甲始终朝向乙的当前位置;同样,乙朝向丙、丙朝向丁、丁朝向甲。试绘制4人行走过程的近似轨迹。

分析:在运动学中,速度是位移相对于时间的导数,即
$$v(t)=\frac{d}{dt}r(t)$$
因此,在一段很短的时间$\Delta t$内,近似地有
$$r(t+\Delta t)\approx r(t)+v(t)\cdot \Delta t$$
又由于位移、速度均是矢量,因此在xOy平面内,又有
$$\begin{cases}
r_{x}(t+\Delta t)\approx r_{x}(t)+v(t)\cdot \Delta t \cdot cos\theta (t)\\
r_{y}(t+\Delta t)\approx r_{y}(t)+v(t)\cdot \Delta t \cdot sin\theta (t)
\end{cases}
$$
其中,$\theta (t)$是t时刻与x轴正向的夹角。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import numpy as np
import numpy.linalg as ng
import matplotlib.pyplot as plt

N = 4 # 4个人
v = 1.0 # 速度

xy = np.array([[-200,200],[200,200],[200,-200],[-200,-200]]) # 当前位置
xyn = np.empty((4,2)) # 下一时刻位置

T = np.linspace(0,400,201) # 设定400s
dt = T[1] - T[0] # 单位时间

Txy = xy # 存放所有人的位置信息(时间轴)

for n in range(1,len(T)):
for i in [0,1,2,3]:
j = (i+1)%4 # 所面对的人
dxy = xy[j] - xy[i]
dd = dxy/ng.norm(dxy) # 单位化向量
xyn[i] = xy[i] +v*dt*dd # j下一时刻所处位置
Txy = np.c_[Txy, xyn] # 记录行程
xy = xyn.copy() # 更新当前位置

for i in range(N):
plt.plot(Txy[i,::2],Txy[i,1::2])
plt.show()
0%