线性化 (文档字符串)¶
- class sympy.physics.mechanics.linearize.Linearizer(
- f_0,
- f_1,
- f_2,
- f_3,
- f_4,
- f_c,
- f_v,
- f_a,
- q,
- u,
- q_i=None,
- q_d=None,
- u_i=None,
- u_d=None,
- r=None,
- lams=None,
- linear_solver='LU',
此对象保存动态系统的一般模型形式。该模型用于计算系统的线性化形式,同时正确处理导致依赖坐标和速度的约束。符号和方法在 [1] 中描述。
- 属性:
- f_0, f_1, f_2, f_3, f_4, f_c, f_v, f_a矩阵
持有一般系统形式的矩阵。
- q, u, r矩阵
包含广义坐标、速度和输入向量的矩阵。
- q_i, u_i矩阵
独立广义坐标和速度的矩阵。
- q_d, u_d矩阵
依赖的广义坐标和速度的矩阵。
- perm_mat矩阵
置换矩阵使得 [q_ind, u_ind]^T = perm_mat*[q, u]^T
方法
linearize
([op_point, A_and_B, simplify])在线性化操作点附近的系统。
参考文献
[1]D. L. Peterson, G. Gede, and M. Hubbard, “Symbolic linearization of equations of motion of constrained multibody systems,” Multibody Syst Dyn, vol. 33, no. 2, pp. 143-161, Feb. 2015, doi: 10.1007/s11044-014-9436-5.
- __init__(
- f_0,
- f_1,
- f_2,
- f_3,
- f_4,
- f_c,
- f_v,
- f_a,
- q,
- u,
- q_i=None,
- q_d=None,
- u_i=None,
- u_d=None,
- r=None,
- lams=None,
- linear_solver='LU',
- 参数:
- f_0, f_1, f_2, f_3, f_4, f_c, f_v, f_aarray_like
方程组保持一般系统形式。如果参数不存在,则提供空数组或矩阵。
- qarray_like
广义坐标。
- uarray_like
广义速度
- q_i, u_i类似数组, 可选
独立的广义坐标和速度。
- q_d, u_d类似数组, 可选
依赖的广义坐标和速度。
- r类似数组, 可选
输入变量。
- lams类似数组, 可选
拉格朗日乘数
- 线性求解器str, 可调用
用于在线性化过程中解决形式为
A*x=b
的几个符号线性系统的方法。如果提供的是字符串,它应该是一个可以使用sympy.matrices.matrixbase.MatrixBase.solve()
的有效方法。如果提供的是可调用对象,它应该具有格式x = f(A, b)
,其中它解决方程并返回解。默认值是'LU'
,对应于 SymPy 的A.LUsolve(b)
。LUsolve()
计算速度快,但通常会导致除以零,从而产生nan
结果。
- linearize(
- op_point=None,
- A_and_B=False,
- simplify=False,
在线性化系统时,请考虑操作点。注意,q_op、u_op、qd_op、ud_op必须满足运动方程。这些可以是符号形式或数值形式。
- 参数:
- op_point字典或字典的可迭代对象,可选
包含所有或部分广义坐标、广义速度及其时间导数的操作点条件的字典或字典可迭代对象。这些将在线性化完成之前被代入线性化系统中。如果希望操作点为任意符号集,请将其设置为
None
。请注意,任何符号的减少(无论是代入数字还是具有共同参数的表达式)都将导致更快的运行时间。- A_和_Bbool, 可选
如果 A_and_B=False(默认),则返回 (M, A, B),如果 A_and_B=True,则返回 (A, B)。见下文。
- 简化bool, 可选
确定返回值在返回之前是否被简化。对于大型表达式,这可能会耗费时间。默认值为 False。
- 返回:
- M, A, B : 矩阵,
A_and_B=False
矩阵, - 隐式形式的矩阵:
[M]*[q', u']^T = [A]*[q_ind, u_ind]^T + [B]*r
- A, B : 矩阵,
A_and_B=True
矩阵, - 显式形式的矩阵:
[q_ind', u_ind']^T = [A]*[q_ind, u_ind]^T + [B]*r
- M, A, B : 矩阵,
注释
注意,如果存在许多符号参数,使用 A_and_B=True 进行求解的过程在计算上是密集的。因此,使用默认的 A_and_B=False 可能更为理想,返回 M、A 和 B。随后可以向这些矩阵中代入更多值。状态空间形式可以通过 A = P.T*M.LUsolve(A),B = P.T*M.LUsolve(B) 找到,其中 P = Linearizer.perm_mat。