证明四元数乘法与旋转矩阵乘法等价

news2024/9/22 13:38:28

刚体四元数姿态控制 一文中没有证明的公式
R ( Q 1 ) R ( Q 2 ) = R ( Q 1 ∘ Q 2 ) R(Q_1)R(Q_2)=R(Q_1\circ Q_2) R(Q1)R(Q2)=R(Q1Q2)
在这篇文章中证明。
首先找几个数测试是否等价。
quaternions.py的代码见 自用的四元数、欧拉角、旋转矩阵转换代码。
下面的代码中,为了测试准确,四元数还要保证归一化,不如事先拿几个欧拉角转成四元数。

import numpy as np
from pythonsrc.quaternions import *

e1 = np.array([2, 0.2, -0.1])
e2 = np.array([0.1, 0.2, -0.3])
q1 = Euler_To_Quaternion(e1)
q2 = Euler_To_Quaternion(e2)
q3 = Quaternion_Product(q2, q1)
r1 = Quaternion_to_Rotation(q1)
r2 = Quaternion_to_Rotation(q2)
r3 = Quaternion_to_Rotation(q3)
r4 = r1 @ r2
print(sum(sum(r3-r4)))

然后测试一下 sympy 计算四元数转旋转矩阵的公式是否正确。

import sympy

def Antisymmetric(mat):
    ans = sympy.Matrix([
        [0, -mat[2], mat[1]],
        [mat[2], 0, -mat[0]],
        [-mat[1], mat[0], 0],
    ])
    return ans

qsa, qvxa, qvya, qvza = sympy.symbols('s_a, v_{ax}, v_{ay}, v_{az}')
qsb, qvxb, qvyb, qvzb = sympy.symbols('s_b, v_{bx}, v_{by}, v_{bz}')
qva = sympy.Matrix([qvxa, qvya, qvza])
qvb = sympy.Matrix([qvxb, qvyb, qvzb])
result = (qsa**2 - qva.T.dot(qva))*sympy.eye(3)
result += 2*qva*qva.T
result += 2*qsa*Antisymmetric(qva)
sympy.print_latex(result)

最后正式验证等价性。

import sympy

def Antisymmetric(mat):
    ans = sympy.Matrix([
        [0, -mat[2], mat[1]],
        [mat[2], 0, -mat[0]],
        [-mat[1], mat[0], 0],
    ])
    return ans

def Quaternion_to_Rotation(Q):
    q0, q1, q2, q3 = Q
    return sympy.Matrix([
        [q0*q0+q1*q1-q2*q2-q3*q3, 2*q1*q2-2*q0*q3, 2*q1*q3+2*q0*q2],
        [2*q1*q2+2*q0*q3, q0*q0-q1*q1+q2*q2-q3*q3, 2*q2*q3-2*q0*q1],
        [2*q1*q3-2*q0*q2, 2*q2*q3+2*q0*q1, q0*q0-q1*q1-q2*q2+q3*q3],
    ])

def Quaternion_Product(Q1, Q2):
    w1, x1, y1, z1 = Q1
    w2, x2, y2, z2 = Q2
    w = w1 * w2 - x1 * x2 - y1 * y2 - z1 * z2
    x = w1 * x2 + x1 * w2 + y1 * z2 - z1 * y2
    y = w1 * y2 + y1 * w2 + z1 * x2 - x1 * z2
    z = w1 * z2 + z1 * w2 + x1 * y2 - y1 * x2
    return sympy.Matrix([w, x, y, z])

qsa, qvxa, qvya, qvza = sympy.symbols('s_a, v_{ax}, v_{ay}, v_{az}')
qsb, qvxb, qvyb, qvzb = sympy.symbols('s_b, v_{bx}, v_{by}, v_{bz}')
Qa = sympy.Matrix([qsa, qvxa, qvya, qvza])
Qb = sympy.Matrix([qsb, qvxb, qvyb, qvzb])
Qc = Quaternion_Product(Qa, Qb)
Ra = Quaternion_to_Rotation(Qa)
Rb = Quaternion_to_Rotation(Qb)
Rc = Quaternion_to_Rotation(Qc)
Rd = Ra @ Rb
sympy.print_latex(Rc)
sympy.print_latex(Rd)
err = Rc - Rd
sympy.print_latex(err.expand())

输出结果如下,公式特别复杂,两个矩阵的误差为0。
在这里插入图片描述
[ ( s a s b − v a x v b x − v a y v b y − v a z v b z ) 2 + ( s a v b x + s b v a x + v a y v b z − v a z v b y ) 2 − ( s a v b y + s b v a y − v a x v b z + v a z v b x ) 2 − ( s a v b z + s b v a z + v a x v b y − v a y v b x ) 2 − ( 2 s a s b − 2 v a x v b x − 2 v a y v b y − 2 v a z v b z ) ( s a v b z + s b v a z + v a x v b y − v a y v b x ) + ( 2 s a v b x + 2 s b v a x + 2 v a y v b z − 2 v a z v b y ) ( s a v b y + s b v a y − v a x v b z + v a z v b x ) ( 2 s a s b − 2 v a x v b x − 2 v a y v b y − 2 v a z v b z ) ( s a v b y + s b v a y − v a x v b z + v a z v b x ) + ( 2 s a v b x + 2 s b v a x + 2 v a y v b z − 2 v a z v b y ) ( s a v b z + s b v a z + v a x v b y − v a y v b x ) ( 2 s a s b − 2 v a x v b x − 2 v a y v b y − 2 v a z v b z ) ( s a v b z + s b v a z + v a x v b y − v a y v b x ) + ( 2 s a v b x + 2 s b v a x + 2 v a y v b z − 2 v a z v b y ) ( s a v b y + s b v a y − v a x v b z + v a z v b x ) ( s a s b − v a x v b x − v a y v b y − v a z v b z ) 2 − ( s a v b x + s b v a x + v a y v b z − v a z v b y ) 2 + ( s a v b y + s b v a y − v a x v b z + v a z v b x ) 2 − ( s a v b z + s b v a z + v a x v b y − v a y v b x ) 2 − ( 2 s a s b − 2 v a x v b x − 2 v a y v b y − 2 v a z v b z ) ( s a v b x + s b v a x + v a y v b z − v a z v b y ) + ( 2 s a v b y + 2 s b v a y − 2 v a x v b z + 2 v a z v b x ) ( s a v b z + s b v a z + v a x v b y − v a y v b x ) − ( 2 s a s b − 2 v a x v b x − 2 v a y v b y − 2 v a z v b z ) ( s a v b y + s b v a y − v a x v b z + v a z v b x ) + ( 2 s a v b x + 2 s b v a x + 2 v a y v b z − 2 v a z v b y ) ( s a v b z + s b v a z + v a x v b y − v a y v b x ) ( 2 s a s b − 2 v a x v b x − 2 v a y v b y − 2 v a z v b z ) ( s a v b x + s b v a x + v a y v b z − v a z v b y ) + ( 2 s a v b y + 2 s b v a y − 2 v a x v b z + 2 v a z v b x ) ( s a v b z + s b v a z + v a x v b y − v a y v b x ) ( s a s b − v a x v b x − v a y v b y − v a z v b z ) 2 − ( s a v b x + s b v a x + v a y v b z − v a z v b y ) 2 − ( s a v b y + s b v a y − v a x v b z + v a z v b x ) 2 + ( s a v b z + s b v a z + v a x v b y − v a y v b x ) 2 ] \left[\begin{matrix}\left(s_{a} s_{b} - v_{ax} v_{bx} - v_{ay} v_{by} - v_{az} v_{bz}\right)^{2} + \left(s_{a} v_{bx} + s_{b} v_{ax} + v_{ay} v_{bz} - v_{az} v_{by}\right)^{2} - \left(s_{a} v_{by} + s_{b} v_{ay} - v_{ax} v_{bz} + v_{az} v_{bx}\right)^{2} - \left(s_{a} v_{bz} + s_{b} v_{az} + v_{ax} v_{by} - v_{ay} v_{bx}\right)^{2} & - \left(2 s_{a} s_{b} - 2 v_{ax} v_{bx} - 2 v_{ay} v_{by} - 2 v_{az} v_{bz}\right) \left(s_{a} v_{bz} + s_{b} v_{az} + v_{ax} v_{by} - v_{ay} v_{bx}\right) + \left(2 s_{a} v_{bx} + 2 s_{b} v_{ax} + 2 v_{ay} v_{bz} - 2 v_{az} v_{by}\right) \left(s_{a} v_{by} + s_{b} v_{ay} - v_{ax} v_{bz} + v_{az} v_{bx}\right) & \left(2 s_{a} s_{b} - 2 v_{ax} v_{bx} - 2 v_{ay} v_{by} - 2 v_{az} v_{bz}\right) \left(s_{a} v_{by} + s_{b} v_{ay} - v_{ax} v_{bz} + v_{az} v_{bx}\right) + \left(2 s_{a} v_{bx} + 2 s_{b} v_{ax} + 2 v_{ay} v_{bz} - 2 v_{az} v_{by}\right) \left(s_{a} v_{bz} + s_{b} v_{az} + v_{ax} v_{by} - v_{ay} v_{bx}\right)\\\left(2 s_{a} s_{b} - 2 v_{ax} v_{bx} - 2 v_{ay} v_{by} - 2 v_{az} v_{bz}\right) \left(s_{a} v_{bz} + s_{b} v_{az} + v_{ax} v_{by} - v_{ay} v_{bx}\right) + \left(2 s_{a} v_{bx} + 2 s_{b} v_{ax} + 2 v_{ay} v_{bz} - 2 v_{az} v_{by}\right) \left(s_{a} v_{by} + s_{b} v_{ay} - v_{ax} v_{bz} + v_{az} v_{bx}\right) & \left(s_{a} s_{b} - v_{ax} v_{bx} - v_{ay} v_{by} - v_{az} v_{bz}\right)^{2} - \left(s_{a} v_{bx} + s_{b} v_{ax} + v_{ay} v_{bz} - v_{az} v_{by}\right)^{2} + \left(s_{a} v_{by} + s_{b} v_{ay} - v_{ax} v_{bz} + v_{az} v_{bx}\right)^{2} - \left(s_{a} v_{bz} + s_{b} v_{az} + v_{ax} v_{by} - v_{ay} v_{bx}\right)^{2} & - \left(2 s_{a} s_{b} - 2 v_{ax} v_{bx} - 2 v_{ay} v_{by} - 2 v_{az} v_{bz}\right) \left(s_{a} v_{bx} + s_{b} v_{ax} + v_{ay} v_{bz} - v_{az} v_{by}\right) + \left(2 s_{a} v_{by} + 2 s_{b} v_{ay} - 2 v_{ax} v_{bz} + 2 v_{az} v_{bx}\right) \left(s_{a} v_{bz} + s_{b} v_{az} + v_{ax} v_{by} - v_{ay} v_{bx}\right)\\- \left(2 s_{a} s_{b} - 2 v_{ax} v_{bx} - 2 v_{ay} v_{by} - 2 v_{az} v_{bz}\right) \left(s_{a} v_{by} + s_{b} v_{ay} - v_{ax} v_{bz} + v_{az} v_{bx}\right) + \left(2 s_{a} v_{bx} + 2 s_{b} v_{ax} + 2 v_{ay} v_{bz} - 2 v_{az} v_{by}\right) \left(s_{a} v_{bz} + s_{b} v_{az} + v_{ax} v_{by} - v_{ay} v_{bx}\right) & \left(2 s_{a} s_{b} - 2 v_{ax} v_{bx} - 2 v_{ay} v_{by} - 2 v_{az} v_{bz}\right) \left(s_{a} v_{bx} + s_{b} v_{ax} + v_{ay} v_{bz} - v_{az} v_{by}\right) + \left(2 s_{a} v_{by} + 2 s_{b} v_{ay} - 2 v_{ax} v_{bz} + 2 v_{az} v_{bx}\right) \left(s_{a} v_{bz} + s_{b} v_{az} + v_{ax} v_{by} - v_{ay} v_{bx}\right) & \left(s_{a} s_{b} - v_{ax} v_{bx} - v_{ay} v_{by} - v_{az} v_{bz}\right)^{2} - \left(s_{a} v_{bx} + s_{b} v_{ax} + v_{ay} v_{bz} - v_{az} v_{by}\right)^{2} - \left(s_{a} v_{by} + s_{b} v_{ay} - v_{ax} v_{bz} + v_{az} v_{bx}\right)^{2} + \left(s_{a} v_{bz} + s_{b} v_{az} + v_{ax} v_{by} - v_{ay} v_{bx}\right)^{2}\end{matrix}\right] (sasbvaxvbxvayvbyvazvbz)2+(savbx+sbvax+vayvbzvazvby)2(savby+sbvayvaxvbz+vazvbx)2(savbz+sbvaz+vaxvbyvayvbx)2(2sasb2vaxvbx2vayvby2vazvbz)(savbz+sbvaz+vaxvbyvayvbx)+(2savbx+2sbvax+2vayvbz2vazvby)(savby+sbvayvaxvbz+vazvbx)(2sasb2vaxvbx2vayvby2vazvbz)(savby+sbvayvaxvbz+vazvbx)+(2savbx+2sbvax+2vayvbz2vazvby)(savbz+sbvaz+vaxvbyvayvbx)(2sasb2vaxvbx2vayvby2vazvbz)(savbz+sbvaz+vaxvbyvayvbx)+(2savbx+2sbvax+2vayvbz2vazvby)(savby+sbvayvaxvbz+vazvbx)(sasbvaxvbxvayvbyvazvbz)2(savbx+sbvax+vayvbzvazvby)2+(savby+sbvayvaxvbz+vazvbx)2(savbz+sbvaz+vaxvbyvayvbx)2(2sasb2vaxvbx2vayvby2vazvbz)(savbx+sbvax+vayvbzvazvby)+(2savby+2sbvay2vaxvbz+2vazvbx)(savbz+sbvaz+vaxvbyvayvbx)(2sasb2vaxvbx2vayvby2vazvbz)(savby+sbvayvaxvbz+vazvbx)+(2savbx+2sbvax+2vayvbz2vazvby)(savbz+sbvaz+vaxvbyvayvbx)(2sasb2vaxvbx2vayvby2vazvbz)(savbx+sbvax+vayvbzvazvby)+(2savby+2sbvay2vaxvbz+2vazvbx)(savbz+sbvaz+vaxvbyvayvbx)(sasbvaxvbxvayvbyvazvbz)2(savbx+sbvax+vayvbzvazvby)2(savby+sbvayvaxvbz+vazvbx)2+(savbz+sbvaz+vaxvbyvayvbx)2
[ ( 2 s a v a y + 2 v a x v a z ) ( − 2 s b v b y + 2 v b x v b z ) + ( − 2 s a v a z + 2 v a x v a y ) ( 2 s b v b z + 2 v b x v b y ) + ( s a 2 + v a x 2 − v a y 2 − v a z 2 ) ( s b 2 + v b x 2 − v b y 2 − v b z 2 ) ( 2 s a v a y + 2 v a x v a z ) ( 2 s b v b x + 2 v b y v b z ) + ( − 2 s a v a z + 2 v a x v a y ) ( s b 2 − v b x 2 + v b y 2 − v b z 2 ) + ( − 2 s b v b z + 2 v b x v b y ) ( s a 2 + v a x 2 − v a y 2 − v a z 2 ) ( 2 s a v a y + 2 v a x v a z ) ( s b 2 − v b x 2 − v b y 2 + v b z 2 ) + ( − 2 s a v a z + 2 v a x v a y ) ( − 2 s b v b x + 2 v b y v b z ) + ( 2 s b v b y + 2 v b x v b z ) ( s a 2 + v a x 2 − v a y 2 − v a z 2 ) ( − 2 s a v a x + 2 v a y v a z ) ( − 2 s b v b y + 2 v b x v b z ) + ( 2 s a v a z + 2 v a x v a y ) ( s b 2 + v b x 2 − v b y 2 − v b z 2 ) + ( 2 s b v b z + 2 v b x v b y ) ( s a 2 − v a x 2 + v a y 2 − v a z 2 ) ( − 2 s a v a x + 2 v a y v a z ) ( 2 s b v b x + 2 v b y v b z ) + ( 2 s a v a z + 2 v a x v a y ) ( − 2 s b v b z + 2 v b x v b y ) + ( s a 2 − v a x 2 + v a y 2 − v a z 2 ) ( s b 2 − v b x 2 + v b y 2 − v b z 2 ) ( − 2 s a v a x + 2 v a y v a z ) ( s b 2 − v b x 2 − v b y 2 + v b z 2 ) + ( 2 s a v a z + 2 v a x v a y ) ( 2 s b v b y + 2 v b x v b z ) + ( − 2 s b v b x + 2 v b y v b z ) ( s a 2 − v a x 2 + v a y 2 − v a z 2 ) ( 2 s a v a x + 2 v a y v a z ) ( 2 s b v b z + 2 v b x v b y ) + ( − 2 s a v a y + 2 v a x v a z ) ( s b 2 + v b x 2 − v b y 2 − v b z 2 ) + ( − 2 s b v b y + 2 v b x v b z ) ( s a 2 − v a x 2 − v a y 2 + v a z 2 ) ( 2 s a v a x + 2 v a y v a z ) ( s b 2 − v b x 2 + v b y 2 − v b z 2 ) + ( − 2 s a v a y + 2 v a x v a z ) ( − 2 s b v b z + 2 v b x v b y ) + ( 2 s b v b x + 2 v b y v b z ) ( s a 2 − v a x 2 − v a y 2 + v a z 2 ) ( 2 s a v a x + 2 v a y v a z ) ( − 2 s b v b x + 2 v b y v b z ) + ( − 2 s a v a y + 2 v a x v a z ) ( 2 s b v b y + 2 v b x v b z ) + ( s a 2 − v a x 2 − v a y 2 + v a z 2 ) ( s b 2 − v b x 2 − v b y 2 + v b z 2 ) ] \left[\begin{matrix}\left(2 s_{a} v_{ay} + 2 v_{ax} v_{az}\right) \left(- 2 s_{b} v_{by} + 2 v_{bx} v_{bz}\right) + \left(- 2 s_{a} v_{az} + 2 v_{ax} v_{ay}\right) \left(2 s_{b} v_{bz} + 2 v_{bx} v_{by}\right) + \left(s_{a}^{2} + v_{ax}^{2} - v_{ay}^{2} - v_{az}^{2}\right) \left(s_{b}^{2} + v_{bx}^{2} - v_{by}^{2} - v_{bz}^{2}\right) & \left(2 s_{a} v_{ay} + 2 v_{ax} v_{az}\right) \left(2 s_{b} v_{bx} + 2 v_{by} v_{bz}\right) + \left(- 2 s_{a} v_{az} + 2 v_{ax} v_{ay}\right) \left(s_{b}^{2} - v_{bx}^{2} + v_{by}^{2} - v_{bz}^{2}\right) + \left(- 2 s_{b} v_{bz} + 2 v_{bx} v_{by}\right) \left(s_{a}^{2} + v_{ax}^{2} - v_{ay}^{2} - v_{az}^{2}\right) & \left(2 s_{a} v_{ay} + 2 v_{ax} v_{az}\right) \left(s_{b}^{2} - v_{bx}^{2} - v_{by}^{2} + v_{bz}^{2}\right) + \left(- 2 s_{a} v_{az} + 2 v_{ax} v_{ay}\right) \left(- 2 s_{b} v_{bx} + 2 v_{by} v_{bz}\right) + \left(2 s_{b} v_{by} + 2 v_{bx} v_{bz}\right) \left(s_{a}^{2} + v_{ax}^{2} - v_{ay}^{2} - v_{az}^{2}\right)\\\left(- 2 s_{a} v_{ax} + 2 v_{ay} v_{az}\right) \left(- 2 s_{b} v_{by} + 2 v_{bx} v_{bz}\right) + \left(2 s_{a} v_{az} + 2 v_{ax} v_{ay}\right) \left(s_{b}^{2} + v_{bx}^{2} - v_{by}^{2} - v_{bz}^{2}\right) + \left(2 s_{b} v_{bz} + 2 v_{bx} v_{by}\right) \left(s_{a}^{2} - v_{ax}^{2} + v_{ay}^{2} - v_{az}^{2}\right) & \left(- 2 s_{a} v_{ax} + 2 v_{ay} v_{az}\right) \left(2 s_{b} v_{bx} + 2 v_{by} v_{bz}\right) + \left(2 s_{a} v_{az} + 2 v_{ax} v_{ay}\right) \left(- 2 s_{b} v_{bz} + 2 v_{bx} v_{by}\right) + \left(s_{a}^{2} - v_{ax}^{2} + v_{ay}^{2} - v_{az}^{2}\right) \left(s_{b}^{2} - v_{bx}^{2} + v_{by}^{2} - v_{bz}^{2}\right) & \left(- 2 s_{a} v_{ax} + 2 v_{ay} v_{az}\right) \left(s_{b}^{2} - v_{bx}^{2} - v_{by}^{2} + v_{bz}^{2}\right) + \left(2 s_{a} v_{az} + 2 v_{ax} v_{ay}\right) \left(2 s_{b} v_{by} + 2 v_{bx} v_{bz}\right) + \left(- 2 s_{b} v_{bx} + 2 v_{by} v_{bz}\right) \left(s_{a}^{2} - v_{ax}^{2} + v_{ay}^{2} - v_{az}^{2}\right)\\\left(2 s_{a} v_{ax} + 2 v_{ay} v_{az}\right) \left(2 s_{b} v_{bz} + 2 v_{bx} v_{by}\right) + \left(- 2 s_{a} v_{ay} + 2 v_{ax} v_{az}\right) \left(s_{b}^{2} + v_{bx}^{2} - v_{by}^{2} - v_{bz}^{2}\right) + \left(- 2 s_{b} v_{by} + 2 v_{bx} v_{bz}\right) \left(s_{a}^{2} - v_{ax}^{2} - v_{ay}^{2} + v_{az}^{2}\right) & \left(2 s_{a} v_{ax} + 2 v_{ay} v_{az}\right) \left(s_{b}^{2} - v_{bx}^{2} + v_{by}^{2} - v_{bz}^{2}\right) + \left(- 2 s_{a} v_{ay} + 2 v_{ax} v_{az}\right) \left(- 2 s_{b} v_{bz} + 2 v_{bx} v_{by}\right) + \left(2 s_{b} v_{bx} + 2 v_{by} v_{bz}\right) \left(s_{a}^{2} - v_{ax}^{2} - v_{ay}^{2} + v_{az}^{2}\right) & \left(2 s_{a} v_{ax} + 2 v_{ay} v_{az}\right) \left(- 2 s_{b} v_{bx} + 2 v_{by} v_{bz}\right) + \left(- 2 s_{a} v_{ay} + 2 v_{ax} v_{az}\right) \left(2 s_{b} v_{by} + 2 v_{bx} v_{bz}\right) + \left(s_{a}^{2} - v_{ax}^{2} - v_{ay}^{2} + v_{az}^{2}\right) \left(s_{b}^{2} - v_{bx}^{2} - v_{by}^{2} + v_{bz}^{2}\right)\end{matrix}\right] (2savay+2vaxvaz)(2sbvby+2vbxvbz)+(2savaz+2vaxvay)(2sbvbz+2vbxvby)+(sa2+vax2vay2vaz2)(sb2+vbx2vby2vbz2)(2savax+2vayvaz)(2sbvby+2vbxvbz)+(2savaz+2vaxvay)(sb2+vbx2vby2vbz2)+(2sbvbz+2vbxvby)(sa2vax2+vay2vaz2)(2savax+2vayvaz)(2sbvbz+2vbxvby)+(2savay+2vaxvaz)(sb2+vbx2vby2vbz2)+(2sbvby+2vbxvbz)(sa2vax2vay2+vaz2)(2savay+2vaxvaz)(2sbvbx+2vbyvbz)+(2savaz+2vaxvay)(sb2vbx2+vby2vbz2)+(2sbvbz+2vbxvby)(sa2+vax2vay2vaz2)(2savax+2vayvaz)(2sbvbx+2vbyvbz)+(2savaz+2vaxvay)(2sbvbz+2vbxvby)+(sa2vax2+vay2vaz2)(sb2vbx2+vby2vbz2)(2savax+2vayvaz)(sb2vbx2+vby2vbz2)+(2savay+2vaxvaz)(2sbvbz+2vbxvby)+(2sbvbx+2vbyvbz)(sa2vax2vay2+vaz2)(2savay+2vaxvaz)(sb2vbx2vby2+vbz2)+(2savaz+2vaxvay)(2sbvbx+2vbyvbz)+(2sbvby+2vbxvbz)(sa2+vax2vay2vaz2)(2savax+2vayvaz)(sb2vbx2vby2+vbz2)+(2savaz+2vaxvay)(2sbvby+2vbxvbz)+(2sbvbx+2vbyvbz)(sa2vax2+vay2vaz2)(2savax+2vayvaz)(2sbvbx+2vbyvbz)+(2savay+2vaxvaz)(2sbvby+2vbxvbz)+(sa2vax2vay2+vaz2)(sb2vbx2vby2+vbz2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1316201.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

dockerfite创建镜像---INMP+wordpress

搭建dockerfile---lnmp 在192.168.10.201 使用 Docker 构建 LNMP 环境并运行 Wordpress 网站平台 [rootdocker1 opt]# mkdir nginx mysql php [rootdocker1 opt]# ls #分别拖入四个包: nginx-1.22.0.tar.gz mysql-boost-5.7.20.tar.gz php-7.1.10.tar.bz2 wor…

重要通知!中国电信警告:用户须关闭路由器“双频合一”功能

在网络的无尽时空里,一场电信官方的宣战正酝酿中,目标锁定在我们日常生活中不可或缺的WiFi身上~ 最新消息曝光,竟然是路由器内藏的一个名为“双频合一”的功能引发了这场轰轰烈烈的网络风暴。 我们时常觉得WiFi就像是隐身在我们生活中的超级英…

Faulhaber 2.5代运动控制系统 25mNm/13W

2.5代控制系统; PWM输出; 四象限控制带; RS232或CANopen通信接口; 2250_BX4_CxD 选件,电缆和连接信息: 适配部件:

SystemVerilog基础:并行块fork-join、join_any、join_none(二)

相关阅读 SystemVerilog基础https://blog.csdn.net/weixin_45791458/category_12517449.html 在第一节中,我们讨论了并行块中的fork-join块和fork-join_any块,了解了它们的差异,本文将继续讨论fork-join_none块的使用。 fork-join_none并行块…

Ubuntu 常用命令之 ll 命令用法介绍

ll是ls -l的别名,用于在Ubuntu系统中列出目录的详细信息。ls命令用于列出目录内容,-l选项则以长格式显示,包括文件类型、权限、链接数、所有者、组、大小、最后修改时间以及文件或目录名。 这是ll命令的基本格式 ll [选项]... [文件]...这是…

《地理信息系统原理》笔记/期末复习资料(9. 网络地理信息系统)

目录 9. 网络地理信息系统 9.1. 概述 9.1.1. 网络GIS概念 9.1.2. 网络GIS体系结构 9.1.3. 网络GIS内容体系 9.2. 分布式网络GIS 9.2.1. 分布式网络GIS概念 9.2.2. 分布式主要技术 9.3. WebGIS 9.3.1. WebGIS概念 9.3.2. WebGIS分类与特点 9.3.3. WebGIS技术框架 9…

Graphics Profiler 使用教程

GraphicsProfiler 使用教程 1.工具简介:2.Navigation介绍2.1.打开安装好的Graphics Profiler。2.2.将手机连接到计算机,软件会在手机中安装一个GraphicsProfiler应用(该应用是无界面的)。2.3.Show files list2.4.Record new trace2.4.1.Appli…

Kotlin ArrayList类型toTypedArray转换Array

Kotlin ArrayList类型toTypedArray转换Array data class Point(val x: Float, val y: Float)fun array_test(points: ArrayList<Array<Point>>) {points.forEachIndexed { idx, ap ->ap.forEach {print("$idx $it ")}println()} }fun main(args: Arra…

第二届“奇安信”杯网络安全技能竞赛Reverse | pyre(需要用到反编译工具 pyinstxtractor.py)

赛题描述 这种exe文件怎么调用py的库&#xff1f; 题目附件&#xff1a;&#xff08;下载可能会有问题&#xff0c;记得直接跳过下载就可以了&#xff09; 抱歉无法处理您这个问题哦&#xff0c;您可以换个问题 PyInstaller Extractor 解包 适用场景 制作exe后丢失源代码 前…

基于中小微企业_个体工商户的信贷评分卡模型和用户画像(论文_专利_银行建模_企业调研)

背景介绍 信用贷款是指由银行或其他金融机构向中小微企业和个体工商户提供的一种贷款产品。该贷款的特点是无需提供抵押品或担保&#xff0c;主要依据借款人的信用状况来进行评估和审批。 中小微企业和个体工商户信用贷款的申请流程相对简单&#xff0c;申请人只需要提供个人…

Zebec 推出由 Visa、万事达网络支持的即时支付卡

“Zebec 现已推出全新的加密支付卡&#xff0c;该卡由 Visa、万事达网络支持&#xff0c;具备即时、多链、非托管、无需 KYC、免费等特性&#xff0c;其能够通过加密钱包与多条主流公链链接并直接调用支付&#xff0c;这将是加密支付领域的里程碑事件。” 在 2023 年的 12 月 8…

冗余备份组网——HSRP和GLBP协议

目录 HSRP&#xff08;思科私有协议&#xff09; HSRP基本概念 HSRP工作过程 HSRP的状态 HSRP的可靠性 HSRP相关配置 GLBP协议 HSRP&#xff08;思科私有协议&#xff09; HSRP基本概念 HSRP&#xff08;Host Standby Router Protocol&#xff09;为主机备份路由协议 …

B037-Mybatis基础

目录 为什么需要Mybatis&#xff1f;mybatis简介入门案例其余见代码查询流程增删改流程 - 变动数据要加事务去持久化抽取公共类 mapper接口开发规则概述代码 mapper.xml引入本地约束文件别名日志管理作用log4j的使用规范 井大括号与dollar大括号的区别 框架&#xff1a;半成品&…

C# OpenVINO 直接读取百度模型实现图片旋转角度检测

目录 效果 模型信息 代码 下载 C# OpenVINO 直接读取百度模型实现图片旋转角度检测 效果 模型信息 Inputs ------------------------- name&#xff1a;x tensor&#xff1a;F32[?, 3, 224, 224] --------------------------------------------------------------- Ou…

[RTOS移植]--STM32F767移植RTThread

文章目录 通过STM32cube创建一个工程选择要移植的RTOS源下载到本地如果没有重启软件选择对应配置后续补充 通过STM32cube创建一个工程 选择要移植的RTOS源 下载到本地 如果没有重启软件 选择对应配置 Build started: Project: STM32F767 *** Using Compiler V5.06 update 7 (b…

Self-Attention的学习

文章目录 Self-Attention模型的输入与输出1.为什么引入Self-Attention&#xff1f;2.Self-attention&#xff08;重点&#xff09;2.1 整体架构2.2 计算单个输出的原理2.3 整体的矩阵计算 3.Multi-head Self-attention4.Self-attention的缺点5.Self-attention与CNN的对比6.Self…

selenium 与 chromedriver安装

本文章向大家介绍selenium 安装与 chromedriver安装&#xff0c;主要包括selenium 安装与 chromedriver安装使用实例、应用技巧、基本知识点总结和需要注意事项供大家参考。 一、安装selenium 1、Selenium简介 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开…

msvcr100.dll丢失的多种解决方法,哪个方法更合适你呢

我们打开电脑程序的时候&#xff0c;系统提示电脑丢失msvcr100.dll&#xff0c;无法启动此程序&#xff0c;这该怎么办&#xff1f;msvcr100.dll是电脑一个重要的文件&#xff0c;丢失了就会导致一些应用程序打不开。下面我们就来看看详细的解决步骤。 msvcr110.dll为Visual St…

IS-IS原理与配置

IS-IS原理与配置 • IS-IS&#xff08;Intermediate System to Intermediate System&#xff0c;中间系统到中间系统&#xff09;是ISO &#xff08;International Organization for Standardization&#xff0c;国际标准化组织&#xff09;为它的CLNP &#xff08;ConnectionL…

MySQL——库,表基础操作

目录 一.库的操作 1.显示当前的数据库列表 2.创建数据库 3.字符集和校验规则 4.操纵数据库 5.删除数据库 6.数据库备份与还原 7.查看连接情况 二.表的操作 1.创建表 2.查看表结构 3.修改表 4.删除表 一.库的操作 1.显示当前的数据库列表 show databases; 2.创建数…