使用五阶多项式来表示随时间变化的位置:
$s(t)=c_{1} t^{4}+c_{2} t^{3}+c_{3} t^{2}+c_{4} t+c_{5}$

可以推导出:

速度(一阶导数):
$v(t)=\frac{d s}{d t}=4 c_{1} t^{3}+3 c_{2} t^{2}+2 c_{3} t+ c_{4}$

加速度(二阶导数)
$a(t)=\frac{d v}{d t}=12c_{1} t^{2}+6 c_{2} t+2 c_{3}$
约束条件:
1.初始条件:

在初始时刻$t_0$和终止时刻$t_1$分别设置约束:

$t_0=0$

初始位置:$s(t_0)=c_5=s_0$
初始速度:$v(t_0)=c_4=v_0$
初始加速度:$a(t_0)=2c_3=a_0$

 

2.终止条件约束:

终止位置:$s(t_1)=c_1t_1^4+c_2t_1^3+c_3t_1^2+c_4t_1+c_5=s_1$
终止速度:$v(t_1)=4c_1t_1^3+3c_2t_1^2+2c_3t_1+c_4=v_1$
终止加速度:$a(t_1)=12c_1t_1^2+6c_2t_1+2c_3=a_1$
 

方程组求解:

6个方程,可以解出6个系数$c_1$到$c_6$:
$c_5=s_0$(直接得出)
$c_4=v_0$   (直接得出)
$2c_3=a_0\Rightarrow c_3=\frac{a_0}{2} $
 

对于剩余的三个系数$c_1, c_2$,需要解以下矩阵方程:
$\begin{bmatrix}
  t_1^4& t_1^3\\
  4t_1^3&  3t_1^2\\
\end{bmatrix}\begin{bmatrix}
 c_1\\
 c_2\\
\end{bmatrix}=\begin{bmatrix}
 s_1-c_3t_1^2-c_4t_1-c_5\\
 v_1-2c_3t_1-c_4\\
\end{bmatrix}$


使用 LAPACK 库的 LU 分解法,解方程
python代码示例:

import numpy as np

def solve_quartic_coefficients(t1, s0, v0, a0, s1, v1, a1):
    """
    求解四次多项式 s(t) = c1*t^4 + c2*t^3 + c3*t^2 + c4*t + c5 的系数
    输入参数:
        t1: 终止时间
        s0, v0, a0: 初始位置、速度、加速度
        s1, v1, a1: 终止位置、速度、加速度
    返回:
        系数列表 [c1, c2, c3, c4, c5]
    """
    # 直接已知的系数
    c5 = s0
    c4 = v0
    c3 = a0 / 2

    # 构建矩阵 A 和向量 b
    A = np.array([
        [t1**4, t1**3],
        [4*t1**3, 3*t1**2]
    ])

    # 终止时刻的加速度方程:12*c1*t1^2 + 6*c2*t1 + 2*c3 = a1
    # 速度方程:4*c1*t1^3 + 3*c2*t1^2 + 2*c3*t1 + c4 = v1
    # 位移方程:c1*t1^4 + c2*t1^3 + c3*t1^2 + c4*t1 + c5 = s1
    b = np.array([
        s1 - c3*t1**2 - c4*t1 - c5,
        v1 - 2*c3*t1 - c4
    ])

    # 解线性方程组 Ax = b
    c1, c2 = np.linalg.solve(A, b)

    return [c1, c2, c3, c4, c5]

# 示例参数(与五次多项式示例一致)
t1 = 1.0
s0, v0, a0 = 0.0, 0.0, 0.0
s1, v1, a1 = 1.0, 0.0, 0.0

# 求解系数
coefficients = solve_quartic_coefficients(t1, s0, v0, a0, s1, v1, a1)
print("系数 c1 到 c5:", coefficients)

# 验证终止条件
t = t1
c1, c2, c3, c4, c5 = coefficients

s = c1*t**4 + c2*t**3 + c3*t**2 + c4*t + c5
v = 4*c1*t**3 + 3*c2*t**2 + 2*c3*t + c4
a = 12*c1*t**2 + 6*c2*t + 2*c3

print(f"验证 t={t}: s={s}, v={v}, a={a}")

 

 

 

 

 

标签: none

评论已关闭