线性化 (文档字符串)

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

注释

注意,如果存在许多符号参数,使用 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。