桁架 (文档字符串)

该模块可用于解决与二维桁架相关的问题。

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 上分别存在铰接和滚轴接头。

../../../_images/truss_example.png
>>> 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()

(png, hires.png, pdf)

../../../_images/truss-1.png
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

返回具有提供支撑的节点以及提供的支撑类型,即固定或滚轮。