|
|
@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 给定数据
|
|
|
|
|
|
|
|
t_values = np.array([0, 10, 15, 20, 22.5, 30])
|
|
|
|
|
|
|
|
v_values = np.array([0, 227.04, 362.78, 517.35, 602.97, 901.67])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 计算Newton插值法所需的差商
|
|
|
|
|
|
|
|
def divided_diff(t_values, v_values):
|
|
|
|
|
|
|
|
# 用给定的数值初始化差商数组
|
|
|
|
|
|
|
|
differences = v_values.copy()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 遍历每个数据点,计算差商
|
|
|
|
|
|
|
|
for i in range(1, len(t_values)):
|
|
|
|
|
|
|
|
for j in range(len(t_values) - 1, i - 1, -1):
|
|
|
|
|
|
|
|
differences[j] = (differences[j] - differences[j - 1]) / (t_values[j] - t_values[j - i])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return differences
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 使用Newton插值法寻找 t=16 时的速度
|
|
|
|
|
|
|
|
def newton_interpolation(t_values, v_values, target_t):
|
|
|
|
|
|
|
|
differences = divided_diff(t_values, v_values)
|
|
|
|
|
|
|
|
p = differences[0]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for i in range(1, len(t_values)):
|
|
|
|
|
|
|
|
term = differences[i]
|
|
|
|
|
|
|
|
for j in range(i):
|
|
|
|
|
|
|
|
term *= (target_t - t_values[j])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
p += term
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return p
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
t_target = 16
|
|
|
|
|
|
|
|
velocity_at_16 = newton_interpolation(t_values, v_values, t_target)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print(f"使用Newton插值法,t=16 秒时的速度为: {velocity_at_16:.2f} m/s")
|