桁架 (文档字符串)¶
该模块可用于解决与二维桁架相关的问题。
- class sympy.physics.continuum_mechanics.truss.Truss[源代码][源代码]¶
桁架是由梁等构件通过节点连接而成的刚性结构。在工程学中,桁架是一种仅由二力构件组成的结构。
桁架在工程应用中极为重要,可以在许多现实世界的应用中看到,如桥梁。
- 属性:
internal_forces
返回所有构件的内部力,这些内部力都初始化为0。
loads
返回作用在桁架上的载荷。
member_lengths
返回桁架中每个成员的长度。
members
返回桁架的成员及其起点和终点。
node_labels
返回桁架的节点标签。
node_positions
返回桁架节点的位置。
nodes
返回桁架的节点及其位置。
reaction_loads
返回所有支撑的反作用力,这些反作用力初始化为0。
supports
返回带有提供支撑的节点以及提供的支撑类型。
方法
add_member
(*args)此方法在给定桁架的任意两个节点之间添加一个成员。
add_node
(*args)此方法在桁架中添加一个节点,连同其名称/标签及其位置。
apply_load
(*args)此方法在指定的节点上施加外部载荷。
apply_support
(*args)此方法在指定的节点处添加固定或滚动支撑。
change_member_label
(*args)此方法更改指定成员的标签。
change_node_label
(*args)此方法更改指定节点(s)的标签(s)。
draw
([subs_dict])返回一个包含桁架所有节点、构件、支撑和荷载的图形对象。
remove_load
(*args)此方法移除指定节点上已存在的外部载荷。
remove_member
(*args)此方法从给定的桁架中移除成员。
remove_node
(*args)此方法从桁架中移除一个节点。
remove_support
(*args)此方法从指定节点中移除支持。
solve
()该方法求解桁架中所有支座的反作用力和所有构件的内部力,前提是桁架可解。
示例
存在一个由四个节点和五个连接这些节点的构件组成的桁架。力 P 作用在节点 D 上,并且在节点 A 和 B 上分别存在铰接和滚轴接头。
>>> from sympy.physics.continuum_mechanics.truss import Truss >>> t = Truss() >>> t.add_node(("node_1", 0, 0), ("node_2", 6, 0), ("node_3", 2, 2), ("node_4", 2, 0)) >>> t.add_member(("member_1", "node_1", "node_4"), ("member_2", "node_2", "node_4"), ("member_3", "node_1", "node_3")) >>> t.add_member(("member_4", "node_2", "node_3"), ("member_5", "node_3", "node_4")) >>> t.apply_load(("node_4", 10, 270)) >>> t.apply_support(("node_1", "pinned"), ("node_2", "roller"))
- add_member(*args)[源代码][源代码]¶
此方法在给定桁架的任意两个节点之间添加一个成员。
- 参数:
- 该方法的输入是形式为 (标签, 开始, 结束) 的元组。
- 标签: 字符串或符号
成员的标签。它是唯一识别特定成员的方式。
- start: 字符串或符号
成员的起始点/节点的标签。
- end: 字符串或符号
成员的结束点/节点的标签。
示例
>>> from sympy.physics.continuum_mechanics.truss import Truss >>> t = Truss() >>> t.add_node(('A', 0, 0), ('B', 3, 0), ('C', 2, 2)) >>> t.add_member(('AB', 'A', 'B'), ('BC', 'B', 'C')) >>> t.members {'AB': ['A', 'B'], 'BC': ['B', 'C']}
- add_node(*args)[源代码][源代码]¶
此方法在桁架中添加一个节点,包括其名称/标签及其位置。可以同时添加多个节点。
- 参数:
- 此方法的输入是形式为 (标签, x, y) 的元组。
- 标签: 字符串或符号
节点的标签。它是唯一标识特定节点的方式。
- x: 可符号化的
节点的位置的x坐标。
- y: 可符号化的
节点的位置的y坐标。
示例
>>> from sympy.physics.continuum_mechanics.truss import Truss >>> t = Truss() >>> t.add_node(('A', 0, 0)) >>> t.nodes [('A', 0, 0)] >>> t.add_node(('B', 3, 0), ('C', 4, 1)) >>> t.nodes [('A', 0, 0), ('B', 3, 0), ('C', 4, 1)]
- apply_load(*args)[源代码][源代码]¶
此方法在指定的节点上施加外部载荷。
- 参数:
- 该方法的输入是形式为 (位置, 大小, 方向) 的元组。
- 位置: 字符串或符号
施加载荷的节点标签。
- 量级: 可Sympify的
施加载荷的大小。它必须始终为正,载荷方向的任何变化都不会在此反映。
- 方向: 可Sympify的
负载矢量在逆时针方向与水平线形成的角度,以度为单位。其取值范围为0到360,包括0和360。
示例
>>> from sympy.physics.continuum_mechanics.truss import Truss >>> from sympy import symbols >>> t = Truss() >>> t.add_node(('A', 0, 0), ('B', 3, 0)) >>> P = symbols('P') >>> t.apply_load(('A', P, 90), ('A', P/2, 45), ('A', P/4, 90)) >>> t.loads {'A': [[P, 90], [P/2, 45], [P/4, 90]]}
- apply_support(*args)[源代码][源代码]¶
此方法在指定的节点处添加固定或滚动支撑。
- 参数:
- 该方法的输入形式为 (位置, 类型)。
- 位置: 字符串或符号
添加支持的节点的标签。
- 类型: 字符串
节点提供的支持类型。
示例
>>> from sympy.physics.continuum_mechanics.truss import Truss >>> t = Truss() >>> t.add_node(('A', 0, 0), ('B', 3, 0)) >>> t.apply_support(('A', 'pinned'), ('B', 'roller')) >>> t.supports {'A': 'pinned', 'B': 'roller'}
- change_member_label(*args)[源代码][源代码]¶
此方法更改指定成员的标签。
- 参数:
- 该方法的输入是形式为 (标签, 新标签) 的元组
- 标签: 字符串或符号
需要更改标签的成员的标签。
- new_label: 字符串或符号
成员的新标签。
示例
>>> from sympy.physics.continuum_mechanics.truss import Truss >>> t = Truss() >>> t.add_node(('A', 0, 0), ('B', 3, 0), ('D', 5, 0)) >>> t.nodes [('A', 0, 0), ('B', 3, 0), ('D', 5, 0)] >>> t.change_node_label(('A', 'C')) >>> t.nodes [('C', 0, 0), ('B', 3, 0), ('D', 5, 0)] >>> t.add_member(('BC', 'B', 'C'), ('BD', 'B', 'D')) >>> t.members {'BC': ['B', 'C'], 'BD': ['B', 'D']} >>> t.change_member_label(('BC', 'BC_new'), ('BD', 'BD_new')) >>> t.members {'BC_new': ['B', 'C'], 'BD_new': ['B', 'D']}
- change_node_label(*args)[源代码][源代码]¶
此方法更改指定节点(s)的标签(s)。
- 参数:
- 此方法的输入是一个或多个形式为 (标签, 新标签) 的元组。
- 标签: 字符串或符号
需要更改标签的节点的标签。
- new_label: 字符串或符号
节点的新的标签。
示例
>>> from sympy.physics.continuum_mechanics.truss import Truss >>> t = Truss() >>> t.add_node(('A', 0, 0), ('B', 3, 0)) >>> t.nodes [('A', 0, 0), ('B', 3, 0)] >>> t.change_node_label(('A', 'C'), ('B', 'D')) >>> t.nodes [('C', 0, 0), ('D', 3, 0)]
- draw(subs_dict=None)[源代码][源代码]¶
返回一个包含桁架所有节点、构件、支撑和荷载的图形对象。
备注
用户在输入方向上的载荷值时必须小心。绘图函数假设了一个用于绘制载荷的符号约定。
在右手坐标系中,假设支撑点的反作用力为:铰支座的反作用力在+X和+Y方向,而滚动支座的反作用力在+Y方向。对于载荷,输入的角度范围可以达到360度,在图中,这是载荷矢量与正x轴在逆时针方向上的夹角。
例如,对于一个90度的角度,载荷将沿着+Y方向垂直作用,而270度的角度同样表示垂直载荷,但沿着-Y方向。
示例
>>> from sympy.physics.continuum_mechanics.truss import Truss >>> import math >>> t = Truss() >>> t.add_node(("A", -4, 0), ("B", 0, 0), ("C", 4, 0), ("D", 8, 0)) >>> t.add_node(("E", 6, 2/math.sqrt(3))) >>> t.add_node(("F", 2, 2*math.sqrt(3))) >>> t.add_node(("G", -2, 2/math.sqrt(3))) >>> t.add_member(("AB","A","B"), ("BC","B","C"), ("CD","C","D")) >>> t.add_member(("AG","A","G"), ("GB","G","B"), ("GF","G","F")) >>> t.add_member(("BF","B","F"), ("FC","F","C"), ("CE","C","E")) >>> t.add_member(("FE","F","E"), ("DE","D","E")) >>> t.apply_support(("A","pinned"), ("D","roller")) >>> t.apply_load(("G", 3, 90), ("E", 3, 90), ("F", 2, 90)) >>> p = t.draw() >>> p Plot object containing: [0]: cartesian line: 1 for x over (1.0, 1.0) ... >>> p.show()
- property internal_forces¶
返回所有构件的内部力,这些内部力都初始化为0。
- property loads¶
返回作用在桁架上的载荷。
- property member_lengths¶
返回桁架中每个成员的长度。
- property members¶
返回桁架的成员及其起点和终点。
- property node_labels¶
返回桁架的节点标签。
- property node_positions¶
返回桁架节点的位置。
- property nodes¶
返回桁架的节点及其位置。
- property reaction_loads¶
返回所有支撑的反作用力,这些反作用力初始化为0。
- remove_load(*args)[源代码][源代码]¶
此方法移除指定节点上已存在的外部载荷。
- 参数:
- 该方法的输入是形式为 (位置, 大小, 方向) 的元组。
- 位置: 字符串或符号
施加载荷并要移除的节点的标签。
- 量级: 可Sympify的
施加载荷的大小。
- 方向: 可Sympify的
负载矢量在逆时针方向与水平线形成的角度,以度为单位。其取值范围为0到360,包括0和360。
示例
>>> from sympy.physics.continuum_mechanics.truss import Truss >>> from sympy import symbols >>> t = Truss() >>> t.add_node(('A', 0, 0), ('B', 3, 0)) >>> P = symbols('P') >>> t.apply_load(('A', P, 90), ('A', P/2, 45), ('A', P/4, 90)) >>> t.loads {'A': [[P, 90], [P/2, 45], [P/4, 90]]} >>> t.remove_load(('A', P/4, 90), ('A', P/2, 45)) >>> t.loads {'A': [[P, 90]]}
- remove_member(*args)[源代码][源代码]¶
此方法从给定的桁架中移除成员。
- 参数:
- 标签: 字符串或符号
要移除的成员的标签。
示例
>>> from sympy.physics.continuum_mechanics.truss import Truss >>> t = Truss() >>> t.add_node(('A', 0, 0), ('B', 3, 0), ('C', 2, 2)) >>> t.add_member(('AB', 'A', 'B'), ('AC', 'A', 'C'), ('BC', 'B', 'C')) >>> t.members {'AB': ['A', 'B'], 'AC': ['A', 'C'], 'BC': ['B', 'C']} >>> t.remove_member('AC', 'BC') >>> t.members {'AB': ['A', 'B']}
- remove_node(*args)[源代码][源代码]¶
此方法从桁架中移除一个节点。可以同时移除多个节点。
- 参数:
- 此方法的输入是要移除的节点的标签。
- 标签: 字符串或符号
要移除的节点的标签。
示例
>>> from sympy.physics.continuum_mechanics.truss import Truss >>> t = Truss() >>> t.add_node(('A', 0, 0), ('B', 3, 0), ('C', 5, 0)) >>> t.nodes [('A', 0, 0), ('B', 3, 0), ('C', 5, 0)] >>> t.remove_node('A', 'C') >>> t.nodes [('B', 3, 0)]
- remove_support(*args)[源代码][源代码]¶
此方法从指定节点中移除支持。
- 参数:
- 位置: 字符串或符号
要移除支持的节点标签。
示例
>>> from sympy.physics.continuum_mechanics.truss import Truss >>> t = Truss() >>> t.add_node(('A', 0, 0), ('B', 3, 0)) >>> t.apply_support(('A', 'pinned'), ('B', 'roller')) >>> t.supports {'A': 'pinned', 'B': 'roller'} >>> t.remove_support('A','B') >>> t.supports {}
- solve()[源代码][源代码]¶
该方法求解桁架中所有支座的反作用力和所有构件的内部力,前提是桁架可解。
如果满足以下条件,桁架是可解的,
2n >= r + m
其中 n 是节点数,r 是反作用力数,每个固定支座有 2 个反作用力,每个滚轮有 1 个,m 是构件数。
给定的条件是基于这样一个事实,即只有当变量的数量小于或等于方程的数量时,方程组才是可解的。x和y方向的平衡方程为每个节点提供两个方程,总共给出2n个方程。然而,桁架也需要是稳定的,如果2n > r + m,则可能不稳定。变量的数量仅仅是反作用力和成员力的总和。
备注
构件内力的符号约定围绕每个力是压缩力还是拉力展开。在为每个节点形成方程时,假设构件对节点的内力是离开节点的,即默认情况下每个力都被假设为压缩力。因此,内力的正值表示构件中存在压缩力,负值表示拉力。
示例
>>> from sympy.physics.continuum_mechanics.truss import Truss >>> t = Truss() >>> t.add_node(("node_1", 0, 0), ("node_2", 6, 0), ("node_3", 2, 2), ("node_4", 2, 0)) >>> t.add_member(("member_1", "node_1", "node_4"), ("member_2", "node_2", "node_4"), ("member_3", "node_1", "node_3")) >>> t.add_member(("member_4", "node_2", "node_3"), ("member_5", "node_3", "node_4")) >>> t.apply_load(("node_4", 10, 270)) >>> t.apply_support(("node_1", "pinned"), ("node_2", "roller")) >>> t.solve() >>> t.reaction_loads {'R_node_1_x': 0, 'R_node_1_y': 20/3, 'R_node_2_y': 10/3} >>> t.internal_forces {'member_1': 20/3, 'member_2': 20/3, 'member_3': -20*sqrt(2)/3, 'member_4': -10*sqrt(5)/3, 'member_5': 10}
- property supports¶
返回具有提供支撑的节点以及提供的支撑类型,即固定或滚轮。