Skip to content

线性化

提供的代码是用Julia编写的一系列函数,旨在处理机械系统动力学的各个方面,特别关注约束力、速度雅可比矩阵和刚度矩阵。该代码结构设计用于处理相互连接的物体和装置(如关节和电缆)的复杂系统,包括用于计算雅可比矩阵、刚度矩阵和零空间的函数。让我们分解主要组成部分及其用途。

约束力雅可比矩阵

cstr_forces_jacobian函数计算给定结构的约束力雅可比矩阵。它遍历结构中的物体和装置,根据每个物体和装置的内在和外在约束更新雅可比矩阵ret。该函数同时处理2D和3D系统,尽管目前跳过了2D情况。雅可比矩阵对于理解系统坐标的微小变化如何影响约束力至关重要,这对稳定性和控制分析至关重要。

约束速度雅可比矩阵

cstr_velocity_jacobian函数计算约束速度的雅可比矩阵。与力雅可比矩阵类似,它遍历物体和装置,根据自由坐标的速度更新雅可比矩阵ret。这个函数对于需要准确跟踪和控制系统组件速度的动态模拟至关重要。

有限差分雅可比矩阵

test_fvector函数使用有限差分来近似计算函数L的雅可比矩阵,该函数计算结构中电缆的长度。这个函数通过将分析雅可比矩阵与数值近似进行比较来验证其正确性。使用FiniteDiff包中的FiniteDiff.finite_difference_jacobian函数进行数值微分。

线性化

linearize函数在给定状态附近线性化系统的运动方程。它通过组合质量矩阵、约束雅可比矩阵和切线刚度矩阵等各种组件来构造质量矩阵M、阻尼矩阵Ĉ和刚度矩阵。这种线性化对于控制设计和稳定性分析至关重要,因为它提供了系统在特定操作点附近行为的简化模型。

零空间计算

intrinsic_nullspaceextrinsic_nullspace函数分别计算内在和外在约束的零空间。约束矩阵的零空间代表系统可以在不违反约束的情况下移动的方向。这些函数对于理解系统的自由度和设计尊重约束的控制策略至关重要。

刚度矩阵

build_material_stiffness_matrix!build_geometric_stiffness_matrix!函数分别构造材料和几何刚度矩阵。材料刚度矩阵考虑系统组件的弹性属性,而几何刚度矩阵考虑系统配置对其刚度的影响。这些矩阵对于分析系统对外部载荷的响应和确保其结构完整性至关重要。

切线刚度和阻尼矩阵

add_tangent_stiffness_matrix!add_tangent_damping_matrix!函数分别构造切线刚度和阻尼矩阵。这些矩阵用于在给定状态附近线性化系统的运动方程,捕捉坐标和速度小扰动的影响。这些函数处理各种类型的物体和装置,包括刚体、柔性体和不同类型的关节。

广义力雅可比矩阵

gen_force_jacobian!函数计算广义力相对于系统坐标和速度的雅可比矩阵。这个函数用于动态模拟中,根据系统的当前状态更新作用在系统上的力。该函数处理不同类型的装置,包括集群关节和扭转弹簧阻尼器。

零空间查找器

find_nullspace函数使用行约简算法找到给定矩阵c的零空间。这个函数对于识别系统可以在不违反约束的情况下移动的方向很有用,这对于控制设计和稳定性分析很重要。

零空间生成器

make_nullspace函数创建一个函数,该函数计算给定状态q0下系统约束的零空间。这个函数用于生成零空间矩阵,这对于理解系统的自由度和设计尊重约束的控制策略至关重要。

总的来说,提供的代码是一个全面的工具包,用于分析和模拟复杂机械系统的动力学。它包括用于计算雅可比矩阵、刚度矩阵和零空间的函数,这些对于稳定性分析、控制设计和动态模拟至关重要。

刚度

stiffness.jl 文件实现了一系列用于分析和优化张拉整体结构刚度的函数。主要功能包括:

  1. 静力学和运动学分析

  2. 刚度矩阵的构建和优化

  3. 自应力状态和刚度方向的计算

主要函数

static_kinematic_determine

此函数执行张拉整体结构的静力学和运动学分析。

参数:

  • ℬᵀ: 平衡矩阵的转置

  • atol: 绝对容差(可选)

返回:

  • 自应力状态

  • 刚度方向

optimize_maximum_stiffness 和 optimize_zero_stiffness

这两个函数使用凸优化来最大化或最小化结构刚度。

参数:

  • mat𝒦ps: 预应力刚度矩阵

  • vec𝒦m: 材料刚度矩阵

  • vecI: 单位矩阵向量

  • A, b: 等式约束

  • nx: 变量数量

返回:

  • 优化结果

常见用法

  1. 分析结构的自应力状态:
julia
S, D = static_kinematic_determine(ℬᵀ)
  1. 优化最大刚度:
julia
result = optimize_maximum_stiffness(mat𝒦ps, vec𝒦m, vecI, A, b, nx)
  1. 寻找零刚度构型:
julia
result = optimize_zero_stiffness(mat𝒦ps, vec𝒦m, vecI, A, b, nx, x_0)

内部辅助函数

  • classical_gram_schmidtmodified_gram_schmidt: 用于正交化矩阵列

  • optimize_zero_stiffness_Clarabel: 使用 Clarabel 求解器的零刚度优化版本

这些功能共同提供了一个强大的工具集,用于分析和优化张拉整体结构的刚度特性。