Beam (文档字符串)

该模块可用于使用力学中的奇异函数解决二维梁弯曲问题。

class sympy.physics.continuum_mechanics.beam.Beam(
length,
elastic_modulus,
second_moment,
area=A,
variable=x,
base_char='C',
ild_variable=a,
)[源代码][源代码]

梁是一种结构构件,主要通过抵抗弯曲来承受载荷。梁的特点在于其横截面轮廓(惯性矩)、长度和材料。

备注

在解决梁弯曲问题时,必须使用一致的符号约定;结果将自动遵循所选的符号约定。然而,所选的符号约定必须遵守以下规则:在梁轴的正侧(相对于当前截面),产生正剪力的载荷会产生负弯矩,如下所示(弯曲箭头表示正弯矩和旋转):

../../../_images/allowed-sign-conventions.png
属性:
applied_loads

返回施加在梁对象上的所有载荷的列表。

area

梁的横截面积。

bc_bending_moment
bc_deflection
bc_shear_force
bc_slope
boundary_conditions

返回应用于梁的边界条件字典。

cross_section

梁的横截面

deflection_jumps

返回滑动铰链中的偏转跳跃,以字典形式表示。

elastic_modulus

梁的杨氏模量。

ild_deflection_jumps

返回 I.L.D.

ild_moment

返回 I.L.D.

ild_reactions

返回 I.L.D.

ild_rotation_jumps

返回 I.L.D.

ild_shear

返回 I.L.D.

length

梁的长度。

load

返回一个表示梁对象载荷分布曲线的奇异函数表达式。

reaction_loads

返回一个字典中的反作用力。

rotation_jumps

返回旋转铰链中旋转跳跃的值,以字典形式。

second_moment

梁的惯性矩。

variable

一个可以沿梁的长度用作变量的符号,同时表示荷载分布、剪力曲线、弯矩、斜率曲线和挠度曲线。

方法

apply_load(value, start, order[, end])

此方法将给定到特定梁对象的载荷相加。

apply_rotation_hinge(loc)

此方法在梁的单个位置应用旋转铰链。

apply_sliding_hinge(loc)

此方法在梁的单一位置应用滑动铰链。

apply_support(loc[, type])

此方法对特定梁对象施加支撑,并返回未知反作用力的符号。

bending_moment()

返回一个表示梁对象弯矩曲线的奇异函数表达式。

deflection()

返回一个表示梁对象的弹性曲线或偏转的奇异函数表达式。

draw([pictorial])

返回一个表示梁的梁图的绘图对象。

join(beam[, via])

此方法将两个梁连接起来,形成一个新的复合梁系统。

max_bmoment()

返回 Beam 对象中的最大剪力及其坐标。

max_deflection()

返回梁对象中最大挠度的点及其对应的挠度值。

max_shear_force()

返回 Beam 对象中的最大剪力及其坐标。

plot_bending_moment([subs])

返回 Beam 对象中存在的弯矩图。

plot_deflection([subs])

返回一个用于表示 Beam 对象挠度曲线的图表。

plot_ild_moment([subs])

绘制在移动荷载作用下的弯矩影响线图。

plot_ild_reactions([subs])

绘制在移动载荷作用下的反力影响线图。

plot_ild_shear([subs])

绘制在移动荷载作用下的剪力影响线图。

plot_loading_results([subs])

返回梁对象的剪力、弯矩、斜率和挠度的子图。

plot_shear_force([subs])

返回一个显示梁对象中存在的剪力的图。

plot_shear_stress([subs])

返回梁对象中存在的剪应力图。

plot_slope([subs])

返回 Beam 对象的挠度曲线斜率的图。

point_cflexure()

返回一组弯矩为零的点,并且这些点是梁对象的弯矩曲线从负变正或从正变负的转折点。

remove_load(value, start, order[, end])

此方法移除梁对象上的特定载荷。

shear_force()

返回一个表示 Beam 对象剪力曲线的 Singularity Function 表达式。

shear_stress()

返回表示 Beam 对象剪应力曲线的表达式。

slope()

返回一个表示梁对象弹性曲线斜率的奇异函数表达式。

solve_for_ild_moment(distance, value, *reactions)

确定在移动载荷作用下,指定点处的弯矩影响线图方程。

solve_for_ild_reactions(value, *reactions)

确定在移动载荷作用下的反力影响线图方程。

solve_for_ild_shear(distance, value, *reactions)

确定在移动荷载作用下,指定点的剪力影响线图方程。

solve_for_reaction_loads(*reactions)

求解反作用力。

示例

有一根长度为4米的梁。从梁的一半到末端施加了一个6 N/m的恒定分布载荷。梁下方有两个简支,一个在梁的起始点,另一个在梁的末端。梁末端的挠度受到限制。

使用向下力为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols, Piecewise
>>> E, I = symbols('E, I')
>>> R1, R2 = symbols('R1, R2')
>>> b = Beam(4, E, I)
>>> b.apply_load(R1, 0, -1)
>>> b.apply_load(6, 2, 0)
>>> b.apply_load(R2, 4, -1)
>>> b.bc_deflection = [(0, 0), (4, 0)]
>>> b.boundary_conditions
{'bending_moment': [], 'deflection': [(0, 0), (4, 0)], 'shear_force': [], 'slope': []}
>>> b.load
R1*SingularityFunction(x, 0, -1) + R2*SingularityFunction(x, 4, -1) + 6*SingularityFunction(x, 2, 0)
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.load
-3*SingularityFunction(x, 0, -1) + 6*SingularityFunction(x, 2, 0) - 9*SingularityFunction(x, 4, -1)
>>> b.shear_force()
3*SingularityFunction(x, 0, 0) - 6*SingularityFunction(x, 2, 1) + 9*SingularityFunction(x, 4, 0)
>>> b.bending_moment()
3*SingularityFunction(x, 0, 1) - 3*SingularityFunction(x, 2, 2) + 9*SingularityFunction(x, 4, 1)
>>> b.slope()
(-3*SingularityFunction(x, 0, 2)/2 + SingularityFunction(x, 2, 3) - 9*SingularityFunction(x, 4, 2)/2 + 7)/(E*I)
>>> b.deflection()
(7*x - SingularityFunction(x, 0, 3)/2 + SingularityFunction(x, 2, 4)/4 - 3*SingularityFunction(x, 4, 3)/2)/(E*I)
>>> b.deflection().rewrite(Piecewise)
(7*x - Piecewise((x**3, x >= 0), (0, True))/2
     - 3*Piecewise(((x - 4)**3, x >= 4), (0, True))/2
     + Piecewise(((x - 2)**4, x >= 2), (0, True))/4)/(E*I)

计算长度为 L 的完全符号化梁的支座反力。梁下方有两个简单支座,一个在梁的起始点,另一个在梁的终点。梁在终点的挠度受到限制。梁的载荷为:

  • 在 L/4 处施加的向下点载荷 P1

  • 在 L/8 处施加的向上点载荷 P2

  • 在 L/2 处施加的逆时针力矩 M1

  • 在 3*L/4 处施加的顺时针力矩 M2

  • 一个分布式常量载荷 q1,向下施加,从 L/2 到 3*L/4。

  • 一个分布式常数载荷 q2,向上施加,从 3*L/4 到 L

符号负载不需要任何假设。然而,定义一个正的长度将有助于算法计算解决方案。

>>> E, I = symbols('E, I')
>>> L = symbols("L", positive=True)
>>> P1, P2, M1, M2, q1, q2 = symbols("P1, P2, M1, M2, q1, q2")
>>> R1, R2 = symbols('R1, R2')
>>> b = Beam(L, E, I)
>>> b.apply_load(R1, 0, -1)
>>> b.apply_load(R2, L, -1)
>>> b.apply_load(P1, L/4, -1)
>>> b.apply_load(-P2, L/8, -1)
>>> b.apply_load(M1, L/2, -2)
>>> b.apply_load(-M2, 3*L/4, -2)
>>> b.apply_load(q1, L/2, 0, 3*L/4)
>>> b.apply_load(-q2, 3*L/4, 0, L)
>>> b.bc_deflection = [(0, 0), (L, 0)]
>>> b.solve_for_reaction_loads(R1, R2)
>>> print(b.reaction_loads[R1])
(-3*L**2*q1 + L**2*q2 - 24*L*P1 + 28*L*P2 - 32*M1 + 32*M2)/(32*L)
>>> print(b.reaction_loads[R2])
(-5*L**2*q1 + 7*L**2*q2 - 8*L*P1 + 4*L*P2 + 32*M1 - 32*M2)/(32*L)
property applied_loads

返回施加在梁对象上的所有载荷的列表。列表中的每个载荷都是一个形式为 (值, 起点, 阶数, 终点) 的元组。

示例

有一根长度为4米的梁。在梁的起始点顺时针方向施加了一个大小为3 Nm的力矩。在距起始点2米处,从梁的顶部施加了一个大小为4 N的点载荷。在同一位置施加了一个大小为5 N的点载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I = symbols('E, I')
>>> b = Beam(4, E, I)
>>> b.apply_load(-3, 0, -2)
>>> b.apply_load(4, 2, -1)
>>> b.apply_load(5, 2, -1)
>>> b.load
-3*SingularityFunction(x, 0, -2) + 9*SingularityFunction(x, 2, -1)
>>> b.applied_loads
[(-3, 0, -2, None), (4, 2, -1, None), (5, 2, -1, None)]
apply_load(value, start, order, end=None)[源代码][源代码]

此方法将给定到特定梁对象的载荷相加。

参数:
Sympifyable

插入的值应具有单位 [力/(距离**(n+1))],其中 n 是施加载荷的阶数。施加载荷的单位:

  • 对于力矩,单位 = kN*m

  • 对于点载荷,单位 = kN

  • 对于恒定分布载荷,单位 = kN/m

  • 对于坡道载荷,单位 = kN/m/m

  • 对于抛物线斜坡载荷,单位 = kN/m/m/m

  • … 等等。

开始Sympifyable

施加载荷的起始点。对于点矩和点力,这是施加的位置。

顺序整数

施加载荷的顺序。

  • 对于时刻,顺序 = -2

  • 对于点载荷,顺序 =-1

  • 对于恒定分布载荷,阶数 = 0

  • 对于斜坡载荷,顺序 = 1

  • 对于抛物线斜坡载荷,阶数 = 2

  • … 等等。

结束可符号化的,可选的

如果载荷在梁的长度内有终点,可以使用一个可选参数。

示例

有一根长度为4米的梁。在梁的起始点顺时针方向施加了一个大小为3 Nm的力矩。在距起始点2米处的梁顶部施加了一个大小为4 N的点载荷,并且在距起始点2米到3米之间的梁下方施加了一个大小为2 N/m的抛物线斜坡载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I = symbols('E, I')
>>> b = Beam(4, E, I)
>>> b.apply_load(-3, 0, -2)
>>> b.apply_load(4, 2, -1)
>>> b.apply_load(-2, 2, 2, end=3)
>>> b.load
-3*SingularityFunction(x, 0, -2) + 4*SingularityFunction(x, 2, -1) - 2*SingularityFunction(x, 2, 2) + 2*SingularityFunction(x, 3, 0) + 4*SingularityFunction(x, 3, 1) + 2*SingularityFunction(x, 3, 2)
apply_rotation_hinge(loc)[源代码][源代码]

此方法在梁的单个位置应用旋转铰链。

参数:
locSympifyable

铰链应用点的位置。

返回:
符号

未知旋转跳跃乘以弹性模量和二次矩作为一个符号。

示例

有一根长度为15米的梁。销支座分别放置在0米和10米处。末端有一个固定支座。结构中有两个旋转铰链,一个在5米处,另一个在10米处。在5米处的铰链上施加了一个大小为10 kN的点载荷。从10米到末端,结构上施加了一个5 kN的分布载荷。

使用向上的力和顺时针力矩为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import Symbol
>>> E = Symbol('E')
>>> I = Symbol('I')
>>> b = Beam(15, E, I)
>>> r0 = b.apply_support(0, type='pin')
>>> r10 = b.apply_support(10, type='pin')
>>> r15, m15 = b.apply_support(15, type='fixed')
>>> p5 = b.apply_rotation_hinge(5)
>>> p12 = b.apply_rotation_hinge(12)
>>> b.apply_load(-10, 5, -1)
>>> b.apply_load(-5, 10, 0, 15)
>>> b.solve_for_reaction_loads(r0, r10, r15, m15)
>>> b.reaction_loads
{M_15: -75/2, R_0: 0, R_10: 40, R_15: -5}
>>> b.rotation_jumps
{P_12: -1875/(16*E*I), P_5: 9625/(24*E*I)}
>>> b.rotation_jumps[p12]
-1875/(16*E*I)
>>> b.bending_moment()
-9625*SingularityFunction(x, 5, -1)/24 + 10*SingularityFunction(x, 5, 1)
- 40*SingularityFunction(x, 10, 1) + 5*SingularityFunction(x, 10, 2)/2
+ 1875*SingularityFunction(x, 12, -1)/16 + 75*SingularityFunction(x, 15, 0)/2
+ 5*SingularityFunction(x, 15, 1) - 5*SingularityFunction(x, 15, 2)/2
apply_sliding_hinge(loc)[源代码][源代码]

此方法在梁的单一位置应用滑动铰链。

参数:
locSympifyable

铰链应用点的位置。

返回:
符号

未知挠度跳跃乘以弹性模量和二次矩作为符号。

示例

有一根长度为13米的梁。在起点处有一个固定支撑。在末端有一个销支撑。在8米的位置有一个滑动铰链。在5米处的铰链上施加了一个大小为10 kN的点载荷。

使用向上的力和顺时针力矩为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> b = Beam(13, 20, 20)
>>> r0, m0 = b.apply_support(0, type="fixed")
>>> s8 = b.apply_sliding_hinge(8)
>>> r13 = b.apply_support(13, type="pin")
>>> b.apply_load(-10, 5, -1)
>>> b.solve_for_reaction_loads(r0, m0, r13)
>>> b.reaction_loads
{M_0: -50, R_0: 10, R_13: 0}
>>> b.deflection_jumps
{W_8: 85/24}
>>> b.deflection_jumps[s8]
85/24
>>> b.bending_moment()
50*SingularityFunction(x, 0, 0) - 10*SingularityFunction(x, 0, 1)
+ 10*SingularityFunction(x, 5, 1) - 4250*SingularityFunction(x, 8, -2)/3
>>> b.deflection()
-SingularityFunction(x, 0, 2)/16 + SingularityFunction(x, 0, 3)/240
- SingularityFunction(x, 5, 3)/240 + 85*SingularityFunction(x, 8, 0)/24
apply_support(loc, type='fixed')[源代码][源代码]

此方法对特定梁对象施加支撑,并返回未知反作用力的符号。

参数:
locSympifyable

施加支撑点的位置。

类型字符串

确定应用的梁支撑类型。要应用支撑结构,请选择以下类型: - 零自由度,type = “fixed” - 一自由度,type = “pin” - 二自由度,type = “roller”

返回:
符号或符号的元组

未知的反作用力载荷作为符号。 - 如果类型为“pin”或“roller”,则为 Symbol(reaction_force) - 如果类型为“fixed”,则为 Symbol(reaction_force), Symbol(reaction_moment)

示例

有一根长度为20米的梁。在梁的末端顺时针方向施加了一个大小为100 Nm的力矩。在距离梁顶端10米处施加了一个大小为8 N的点载荷。梁的起点有一个固定支撑,末端有一个滚轮。

使用向上的力和顺时针力矩为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I = symbols('E, I')
>>> b = Beam(20, E, I)
>>> p0, m0 = b.apply_support(0, 'fixed')
>>> p1 = b.apply_support(20, 'roller')
>>> b.apply_load(-8, 10, -1)
>>> b.apply_load(100, 20, -2)
>>> b.solve_for_reaction_loads(p0, m0, p1)
>>> b.reaction_loads
{M_0: 20, R_0: -2, R_20: 10}
>>> b.reaction_loads[p0]
-2
>>> b.load
20*SingularityFunction(x, 0, -2) - 2*SingularityFunction(x, 0, -1)
- 8*SingularityFunction(x, 10, -1) + 100*SingularityFunction(x, 20, -2)
+ 10*SingularityFunction(x, 20, -1)
property area

梁的横截面积。

bending_moment()[源代码][源代码]

返回一个表示梁对象弯矩曲线的奇异函数表达式。

示例

有一根长度为30米的梁。在梁的末端施加了一个顺时针方向的120 Nm的力矩。在梁的起始点从顶部施加了一个8 N的点载荷。梁下方有两个简单的支撑。一个在末端,另一个在距离起点10米处。两个支撑点的挠度都被限制。

使用向上的力和顺时针力矩为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I = symbols('E, I')
>>> R1, R2 = symbols('R1, R2')
>>> b = Beam(30, E, I)
>>> b.apply_load(-8, 0, -1)
>>> b.apply_load(R1, 10, -1)
>>> b.apply_load(R2, 30, -1)
>>> b.apply_load(120, 30, -2)
>>> b.bc_deflection = [(10, 0), (30, 0)]
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.bending_moment()
8*SingularityFunction(x, 0, 1) - 6*SingularityFunction(x, 10, 1) - 120*SingularityFunction(x, 30, 0) - 2*SingularityFunction(x, 30, 1)
property boundary_conditions

返回一个应用于梁的边界条件字典。该字典有三个关键词,分别是 moment、slope 和 deflection。每个关键词的值是一个元组列表,其中每个元组包含边界条件的位置和值,格式为 (位置, 值)。

示例

有一根长度为4米的梁。在0处的弯矩应为4,在4处应为0。梁在0处的斜率应为1。在0处的挠度应为2。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I = symbols('E, I')
>>> b = Beam(4, E, I)
>>> b.bc_deflection = [(0, 2)]
>>> b.bc_slope = [(0, 1)]
>>> b.boundary_conditions
{'bending_moment': [], 'deflection': [(0, 2)], 'shear_force': [], 'slope': [(0, 1)]}

在这里,梁的偏转应在 0 处为 2。同样,梁的斜率应在 0 处为 1

property cross_section

梁的横截面

deflection()[源代码][源代码]

返回一个表示梁对象的弹性曲线或偏转的奇异函数表达式。

示例

有一根长度为30米的梁。在梁的末端施加了一个顺时针方向的120 Nm的力矩。在梁的起始点从顶部施加了一个8 N的点载荷。梁下方有两个简单的支撑。一个在末端,另一个在距离起点10米处。两个支撑点的挠度都被限制。

使用向上的力和顺时针力矩为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I = symbols('E, I')
>>> R1, R2 = symbols('R1, R2')
>>> b = Beam(30, E, I)
>>> b.apply_load(-8, 0, -1)
>>> b.apply_load(R1, 10, -1)
>>> b.apply_load(R2, 30, -1)
>>> b.apply_load(120, 30, -2)
>>> b.bc_deflection = [(10, 0), (30, 0)]
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.deflection()
(4000*x/3 - 4*SingularityFunction(x, 0, 3)/3 + SingularityFunction(x, 10, 3)
    + 60*SingularityFunction(x, 30, 2) + SingularityFunction(x, 30, 3)/3 - 12000)/(E*I)
property deflection_jumps

返回滑动铰链中的偏转跳跃,以字典形式表示。偏转跳跃是滑动铰链中的偏转(以米为单位)。这可以看作是偏转图中的跳跃。

draw(pictorial=True)[源代码][源代码]

返回一个表示梁的梁图的绘图对象。特别是,该图可能包括:

  • 光束。

  • 垂直的黑色箭头表示点载荷和支持反作用力(如果它们是通过 apply_load 方法添加的)。

  • 圆形箭头代表力矩。

  • 阴影区域代表分布载荷。

  • 支持,如果 apply_support 已被执行。

  • 如果一个组合梁是通过 join 方法创建的并且指定了一个铰链,它将显示为一个白色圆盘。

该图显示了梁上侧的正载荷和下侧的负载荷。如果两个或多个分布载荷在同一方向上作用于同一区域,该函数将把它们相加。

备注

用户在输入载荷值时必须小心。绘图函数假设了一个用于绘制载荷的符号约定。给定一个右手坐标系,其中XYZ坐标,梁的长度假设沿正X轴方向。绘图函数将正载荷(n>-2)识别为沿负Y方向作用的载荷,并将正弯矩识别为沿正Z方向作用的弯矩。

参数:
pictorial: Boolean (默认=True)

设置 pictorial=True 将简单地创建一个梁图的图示(缩放)视图。另一方面,pictorial=False 将创建一个在图上具有精确尺寸的梁图。

示例

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> P1, P2, M = symbols('P1, P2, M')
>>> E, I = symbols('E, I')
>>> b = Beam(50, 20, 30)
>>> b.apply_load(-10, 2, -1)
>>> b.apply_load(15, 26, -1)
>>> b.apply_load(P1, 10, -1)
>>> b.apply_load(-P2, 40, -1)
>>> b.apply_load(90, 5, 0, 23)
>>> b.apply_load(10, 30, 1, 50)
>>> b.apply_load(M, 15, -2)
>>> b.apply_load(-M, 30, -2)
>>> p50 = b.apply_support(50, "pin")
>>> p0, m0 = b.apply_support(0, "fixed")
>>> p20 = b.apply_support(20, "roller")
>>> p = b.draw()  
>>> p  
Plot object containing:
[0]: cartesian line: 25*SingularityFunction(x, 5, 0) - 25*SingularityFunction(x, 23, 0)
+ SingularityFunction(x, 30, 1) - 20*SingularityFunction(x, 50, 0)
- SingularityFunction(x, 50, 1) + 5 for x over (0.0, 50.0)
[1]: cartesian line: 5 for x over (0.0, 50.0)
...
>>> p.show() 

(png, hires.png, pdf)

../../../_images/beam-1.png
property elastic_modulus

梁的杨氏模量。

property ild_deflection_jumps

返回滑动铰链中的 I.L.D. 偏转跳变,以字典形式表示。偏转跳变是滑动铰链中的偏转(以米为单位)。这可以看作是偏转图中的跳变。

property ild_moment

返回 I.L.D. 力矩方程。

property ild_reactions

返回字典中的 I.L.D. 反作用力。

property ild_rotation_jumps

返回字典中的 I.L.D. 旋转跳跃在旋转铰链中。旋转跳跃是旋转铰链中的旋转(以弧度为单位)。这可以看作是斜率图中的跳跃。

property ild_shear

返回 I.L.D. 剪切方程。

join(beam, via='fixed')[源代码][源代码]

此方法将两个梁连接起来,形成一个新的复合梁系统。传递的 Beam 类实例被附加到调用对象的右端。此方法可用于形成具有不连续弹性模量或惯性矩值的梁。

参数:
光束Beam 类对象

与调用对象右侧连接的 Beam 对象。

通过字符串

说明两个Beam对象的连接方式 - 对于轴向固定的Beam,via=”fixed” - 对于通过旋转铰链连接的Beam,via=”hinge”

示例

有一根长度为4米的悬臂梁。前2米的惯性矩为 \(1.5*I\),其余部分的惯性矩为 \(I\)。在其自由端顶部施加了一个大小为4 N的点载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I = symbols('E, I')
>>> R1, R2 = symbols('R1, R2')
>>> b1 = Beam(2, E, 1.5*I)
>>> b2 = Beam(2, E, I)
>>> b = b1.join(b2, "fixed")
>>> b.apply_load(20, 4, -1)
>>> b.apply_load(R1, 0, -1)
>>> b.apply_load(R2, 0, -2)
>>> b.bc_slope = [(0, 0)]
>>> b.bc_deflection = [(0, 0)]
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.load
80*SingularityFunction(x, 0, -2) - 20*SingularityFunction(x, 0, -1) + 20*SingularityFunction(x, 4, -1)
>>> b.slope()
(-((-80*SingularityFunction(x, 0, 1) + 10*SingularityFunction(x, 0, 2) - 10*SingularityFunction(x, 4, 2))/I + 120/I)/E + 80.0/(E*I))*SingularityFunction(x, 2, 0)
- 0.666666666666667*(-80*SingularityFunction(x, 0, 1) + 10*SingularityFunction(x, 0, 2) - 10*SingularityFunction(x, 4, 2))*SingularityFunction(x, 0, 0)/(E*I)
+ 0.666666666666667*(-80*SingularityFunction(x, 0, 1) + 10*SingularityFunction(x, 0, 2) - 10*SingularityFunction(x, 4, 2))*SingularityFunction(x, 2, 0)/(E*I)
property length

梁的长度。

property load

返回一个表示梁对象载荷分布曲线的奇异函数表达式。

示例

有一根长度为4米的梁。在梁的起始点施加了一个大小为3 Nm的顺时针方向的力矩。在距起始点2米处的梁顶部施加了一个大小为4 N的点载荷,并且在距起始点3米处的梁下方施加了一个大小为2 N/m的抛物线斜坡载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I = symbols('E, I')
>>> b = Beam(4, E, I)
>>> b.apply_load(-3, 0, -2)
>>> b.apply_load(4, 2, -1)
>>> b.apply_load(-2, 3, 2)
>>> b.load
-3*SingularityFunction(x, 0, -2) + 4*SingularityFunction(x, 2, -1) - 2*SingularityFunction(x, 3, 2)
max_bmoment()[源代码][源代码]

返回 Beam 对象中的最大剪力及其坐标。

max_deflection()[源代码][源代码]

返回梁对象中最大挠度的点及其对应的挠度值。

max_shear_force()[源代码][源代码]

返回 Beam 对象中的最大剪力及其坐标。

plot_bending_moment(subs=None)[源代码][源代码]

返回 Beam 对象中存在的弯矩图。

参数:
subs字典

包含符号作为键及其对应值的Python字典。

示例

有一根长度为8米的梁。从梁的一半到末端施加了一个恒定的分布载荷,大小为10 KN/m。梁下方有两个简单的支撑,一个在梁的起始点,另一个在梁的末端。在梁的顶部,距离起始点4米处还施加了一个大小为5 KN的点载荷。取E = 200 GPa,I = 400*(10**-6) 米**4。

使用向下力为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> R1, R2 = symbols('R1, R2')
>>> b = Beam(8, 200*(10**9), 400*(10**-6))
>>> b.apply_load(5000, 2, -1)
>>> b.apply_load(R1, 0, -1)
>>> b.apply_load(R2, 8, -1)
>>> b.apply_load(10000, 4, 0, end=8)
>>> b.bc_deflection = [(0, 0), (8, 0)]
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.plot_bending_moment()
Plot object containing:
[0]: cartesian line: 13750*SingularityFunction(x, 0, 1) - 5000*SingularityFunction(x, 2, 1)
- 5000*SingularityFunction(x, 4, 2) + 31250*SingularityFunction(x, 8, 1)
+ 5000*SingularityFunction(x, 8, 2) for x over (0.0, 8.0)

(png, hires.png, pdf)

../../../_images/beam-2.png
plot_deflection(subs=None)[源代码][源代码]

返回一个用于表示 Beam 对象挠度曲线的图表。

参数:
subs字典

包含符号作为键及其对应值的Python字典。

示例

有一根长度为8米的梁。从梁的一半到末端施加了一个恒定的分布载荷,大小为10 KN/m。梁下方有两个简单的支撑,一个在梁的起始点,另一个在梁的末端。在梁的顶部,距离起始点4米处还施加了一个大小为5 KN的点载荷。取E = 200 GPa,I = 400*(10**-6) 米**4。

使用向下力为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> R1, R2 = symbols('R1, R2')
>>> b = Beam(8, 200*(10**9), 400*(10**-6))
>>> b.apply_load(5000, 2, -1)
>>> b.apply_load(R1, 0, -1)
>>> b.apply_load(R2, 8, -1)
>>> b.apply_load(10000, 4, 0, end=8)
>>> b.bc_deflection = [(0, 0), (8, 0)]
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.plot_deflection()
Plot object containing:
[0]: cartesian line: 0.00138541666666667*x - 2.86458333333333e-5*SingularityFunction(x, 0, 3)
+ 1.04166666666667e-5*SingularityFunction(x, 2, 3) + 5.20833333333333e-6*SingularityFunction(x, 4, 4)
- 6.51041666666667e-5*SingularityFunction(x, 8, 3) - 5.20833333333333e-6*SingularityFunction(x, 8, 4)
for x over (0.0, 8.0)

(png, hires.png, pdf)

../../../_images/beam-3.png
plot_ild_moment(subs=None)[源代码][源代码]

绘制在移动荷载作用下的弯矩影响线图。此函数应在调用 solve_for_ild_moment() 之后调用。

参数:
subs字典

包含符号作为键及其对应值的Python字典。

示例

有一根长度为12米的梁。梁下方有两个简单支撑,一个在起点,另一个在距离起点8米处。绘制在距离起点4米处,在1kN移动荷载作用下的弯矩影响线(I.L.D.)。

使用向下力为正的符号约定。

>>> from sympy import symbols
>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> E, I = symbols('E, I')
>>> R_0, R_8 = symbols('R_0, R_8')
>>> b = Beam(12, E, I)
>>> p0 = b.apply_support(0, 'roller')
>>> p8 = b.apply_support(8, 'roller')
>>> b.solve_for_ild_reactions(1, R_0, R_8)
>>> b.solve_for_ild_moment(4, 1, R_0, R_8)
>>> b.ild_moment
-(4*SingularityFunction(a, 0, 0) - SingularityFunction(a, 0, 1) + SingularityFunction(a, 4, 1))*SingularityFunction(a, 4, 0)
- SingularityFunction(a, 0, 1)/2 + SingularityFunction(a, 4, 1) - 2*SingularityFunction(a, 12, 0)
- SingularityFunction(a, 12, 1)/2
>>> b.plot_ild_moment()
Plot object containing:
[0]: cartesian line: -(4*SingularityFunction(a, 0, 0) - SingularityFunction(a, 0, 1)
+ SingularityFunction(a, 4, 1))*SingularityFunction(a, 4, 0) - SingularityFunction(a, 0, 1)/2
+ SingularityFunction(a, 4, 1) - 2*SingularityFunction(a, 12, 0) - SingularityFunction(a, 12, 1)/2 for a over (0.0, 12.0)

(png, hires.png, pdf)

../../../_images/beam-4.png
plot_ild_reactions(subs=None)[源代码][源代码]

绘制在移动载荷作用下的反力影响线图。此函数应在调用 solve_for_ild_reactions() 之后调用。

参数:
subs字典

包含符号作为键及其对应值的Python字典。

示例

有一根长度为10米的梁。在距离起点4米处,从梁的顶部施加了一个大小为5kN的点载荷。梁下方有两个简单的支撑,分别位于起点和距离起点7米处。绘制在大小为1kN的移动载荷作用下,两个支撑点处反应的I.L.D.方程。

使用向下力为正的符号约定。

>>> from sympy import symbols
>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> E, I = symbols('E, I')
>>> R_0, R_7 = symbols('R_0, R_7')
>>> b = Beam(10, E, I)
>>> p0 = b.apply_support(0, 'roller')
>>> p7 = b.apply_support(7, 'roller')
>>> b.apply_load(5,4,-1)
>>> b.solve_for_ild_reactions(1,R_0,R_7)
>>> b.ild_reactions
{R_0: -SingularityFunction(a, 0, 0) + SingularityFunction(a, 0, 1)/7
- 3*SingularityFunction(a, 10, 0)/7  - SingularityFunction(a, 10, 1)/7 - 15/7,
R_7: -SingularityFunction(a, 0, 1)/7 + 10*SingularityFunction(a, 10, 0)/7 + SingularityFunction(a, 10, 1)/7 - 20/7}
>>> b.plot_ild_reactions()
PlotGrid object containing:
Plot[0]:Plot object containing:
[0]: cartesian line: -SingularityFunction(a, 0, 0) + SingularityFunction(a, 0, 1)/7
- 3*SingularityFunction(a, 10, 0)/7 - SingularityFunction(a, 10, 1)/7 - 15/7 for a over (0.0, 10.0)
Plot[1]:Plot object containing:
[0]: cartesian line: -SingularityFunction(a, 0, 1)/7 + 10*SingularityFunction(a, 10, 0)/7
+ SingularityFunction(a, 10, 1)/7 - 20/7 for a over (0.0, 10.0)

(png, hires.png, pdf)

../../../_images/beam-5.png
plot_ild_shear(subs=None)[源代码][源代码]

绘制在移动荷载作用下的剪力影响线图。此函数应在调用 solve_for_ild_shear() 之后调用。

参数:
subs字典

包含符号作为键及其对应值的Python字典。

示例

有一根长度为12米的梁。梁下方有两个简支点,一个在起点,另一个在距离起点8米处。绘制在距离起点4米处的剪力影响线(I.L.D.),考虑一个大小为1kN的移动荷载的影响。

使用向下力为正的符号约定。

>>> from sympy import symbols
>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> E, I = symbols('E, I')
>>> R_0, R_8 = symbols('R_0, R_8')
>>> b = Beam(12, E, I)
>>> p0 = b.apply_support(0, 'roller')
>>> p8 = b.apply_support(8, 'roller')
>>> b.solve_for_ild_reactions(1, R_0, R_8)
>>> b.solve_for_ild_shear(4, 1, R_0, R_8)
>>> b.ild_shear
-(-SingularityFunction(a, 0, 0) + SingularityFunction(a, 12, 0) + 2)*SingularityFunction(a, 4, 0)
- SingularityFunction(-a, 0, 0) - SingularityFunction(a, 0, 0) + SingularityFunction(a, 0, 1)/8
+ SingularityFunction(a, 12, 0)/2 - SingularityFunction(a, 12, 1)/8 + 1
>>> b.plot_ild_shear()
Plot object containing:
[0]: cartesian line: -(-SingularityFunction(a, 0, 0) + SingularityFunction(a, 12, 0) + 2)*SingularityFunction(a, 4, 0)
- SingularityFunction(-a, 0, 0) - SingularityFunction(a, 0, 0) + SingularityFunction(a, 0, 1)/8
+ SingularityFunction(a, 12, 0)/2 - SingularityFunction(a, 12, 1)/8 + 1 for a over (0.0, 12.0)

(png, hires.png, pdf)

../../../_images/beam-6.png
plot_loading_results(subs=None)[源代码][源代码]

返回梁对象的剪力、弯矩、斜率和挠度的子图。

参数:
subs字典

包含符号作为键及其对应值的Python字典。

示例

有一根长度为8米的梁。从梁的一半到末端施加了一个恒定的分布载荷,大小为10 KN/m。梁下方有两个简单的支撑,一个在梁的起始点,另一个在梁的末端。在梁的顶部,距离起始点4米处还施加了一个大小为5 KN的点载荷。取E = 200 GPa,I = 400*(10**-6) 米**4。

使用向下力为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> R1, R2 = symbols('R1, R2')
>>> b = Beam(8, 200*(10**9), 400*(10**-6))
>>> b.apply_load(5000, 2, -1)
>>> b.apply_load(R1, 0, -1)
>>> b.apply_load(R2, 8, -1)
>>> b.apply_load(10000, 4, 0, end=8)
>>> b.bc_deflection = [(0, 0), (8, 0)]
>>> b.solve_for_reaction_loads(R1, R2)
>>> axes = b.plot_loading_results()

(png, hires.png, pdf)

../../../_images/beam-7.png
plot_shear_force(subs=None)[源代码][源代码]

返回一个显示梁对象中存在的剪力的图。

参数:
subs字典

包含符号作为键及其对应值的Python字典。

示例

有一根长度为8米的梁。从梁的一半到末端施加了一个恒定的分布载荷,大小为10 KN/m。梁下方有两个简单的支撑,一个在梁的起始点,另一个在梁的末端。在梁的顶部,距离起始点4米处还施加了一个大小为5 KN的点载荷。取E = 200 GPa,I = 400*(10**-6) 米**4。

使用向下力为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> R1, R2 = symbols('R1, R2')
>>> b = Beam(8, 200*(10**9), 400*(10**-6))
>>> b.apply_load(5000, 2, -1)
>>> b.apply_load(R1, 0, -1)
>>> b.apply_load(R2, 8, -1)
>>> b.apply_load(10000, 4, 0, end=8)
>>> b.bc_deflection = [(0, 0), (8, 0)]
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.plot_shear_force()
Plot object containing:
[0]: cartesian line: 13750*SingularityFunction(x, 0, 0) - 5000*SingularityFunction(x, 2, 0)
- 10000*SingularityFunction(x, 4, 1) + 31250*SingularityFunction(x, 8, 0)
+ 10000*SingularityFunction(x, 8, 1) for x over (0.0, 8.0)

(png, hires.png, pdf)

../../../_images/beam-8.png
plot_shear_stress(subs=None)[源代码][源代码]

返回梁对象中存在的剪应力图。

参数:
subs字典

包含符号作为键及其对应值的Python字典。

示例

有一根长度为8米、横截面积为2平方米的梁。从梁的一半到末端施加了一个10 KN/m的恒定分布载荷。梁下方有两个简单的支撑,一个在起点,另一个在梁的终点。在距起点4米处,从梁的顶部施加了一个大小为5 KN的点载荷。取E = 200 GPa,I = 400*(10**-6) 米**4。

使用向下力为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> R1, R2 = symbols('R1, R2')
>>> b = Beam(8, 200*(10**9), 400*(10**-6), 2)
>>> b.apply_load(5000, 2, -1)
>>> b.apply_load(R1, 0, -1)
>>> b.apply_load(R2, 8, -1)
>>> b.apply_load(10000, 4, 0, end=8)
>>> b.bc_deflection = [(0, 0), (8, 0)]
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.plot_shear_stress()
Plot object containing:
[0]: cartesian line: 6875*SingularityFunction(x, 0, 0) - 2500*SingularityFunction(x, 2, 0)
- 5000*SingularityFunction(x, 4, 1) + 15625*SingularityFunction(x, 8, 0)
+ 5000*SingularityFunction(x, 8, 1) for x over (0.0, 8.0)

(png, hires.png, pdf)

../../../_images/beam-9.png
plot_slope(subs=None)[源代码][源代码]

返回 Beam 对象的挠度曲线斜率的图。

参数:
subs字典

包含符号作为键及其对应值的Python字典。

示例

有一根长度为8米的梁。从梁的一半到末端施加了一个恒定的分布载荷,大小为10 KN/m。梁下方有两个简单的支撑,一个在梁的起始点,另一个在梁的末端。在梁的顶部,距离起始点4米处还施加了一个大小为5 KN的点载荷。取E = 200 GPa,I = 400*(10**-6) 米**4。

使用向下力为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> R1, R2 = symbols('R1, R2')
>>> b = Beam(8, 200*(10**9), 400*(10**-6))
>>> b.apply_load(5000, 2, -1)
>>> b.apply_load(R1, 0, -1)
>>> b.apply_load(R2, 8, -1)
>>> b.apply_load(10000, 4, 0, end=8)
>>> b.bc_deflection = [(0, 0), (8, 0)]
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.plot_slope()
Plot object containing:
[0]: cartesian line: -8.59375e-5*SingularityFunction(x, 0, 2) + 3.125e-5*SingularityFunction(x, 2, 2)
+ 2.08333333333333e-5*SingularityFunction(x, 4, 3) - 0.0001953125*SingularityFunction(x, 8, 2)
- 2.08333333333333e-5*SingularityFunction(x, 8, 3) + 0.00138541666666667 for x over (0.0, 8.0)

(png, hires.png, pdf)

../../../_images/beam-10.png
point_cflexure()[源代码][源代码]

返回一组弯矩为零的点,并且这些点是梁对象的弯矩曲线从负变正或从正变负的转折点。

示例

这里有一个10米长的悬臂梁。梁下方有两个简单支撑。一个在起点,另一个在距离起点6米处。在距离起点2米和4米处分别施加了大小为10KN和20KN的点载荷。从距离起点6米处开始到末端,还施加了大小为3KN/m的均布载荷。使用向上力和顺时针力矩为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I = symbols('E, I')
>>> b = Beam(10, E, I)
>>> b.apply_load(-4, 0, -1)
>>> b.apply_load(-46, 6, -1)
>>> b.apply_load(10, 2, -1)
>>> b.apply_load(20, 4, -1)
>>> b.apply_load(3, 6, 0)
>>> b.point_cflexure()
[10/3]
property reaction_loads

返回一个字典中的反作用力。

remove_load(value, start, order, end=None)[源代码][源代码]

此方法移除梁对象上的特定载荷。如果作为参数传递的载荷不在梁上,则返回 ValueError。

参数:
Sympifyable

施加载荷的大小。

开始Sympifyable

施加载荷的起始点。对于点矩和点力,这是施加的位置。

顺序整数

应用载荷的顺序。 - 对于弯矩,顺序= -2 - 对于点载荷,顺序= -1 - 对于恒定分布载荷,顺序= 0 - 对于斜坡载荷,顺序= 1 - 对于抛物线斜坡载荷,顺序= 2 - … 以此类推。

结束可符号化的,可选的

如果载荷在梁的长度内有终点,可以使用一个可选参数。

示例

有一根长度为4米的梁。在梁的起始点施加了一个大小为3 Nm的顺时针方向的力矩。在距起始点2米处的梁顶部施加了一个大小为4 N的点载荷,并且在距起始点2米到3米之间的梁下方施加了一个大小为2 N/m的抛物线斜坡载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I = symbols('E, I')
>>> b = Beam(4, E, I)
>>> b.apply_load(-3, 0, -2)
>>> b.apply_load(4, 2, -1)
>>> b.apply_load(-2, 2, 2, end=3)
>>> b.load
-3*SingularityFunction(x, 0, -2) + 4*SingularityFunction(x, 2, -1) - 2*SingularityFunction(x, 2, 2) + 2*SingularityFunction(x, 3, 0) + 4*SingularityFunction(x, 3, 1) + 2*SingularityFunction(x, 3, 2)
>>> b.remove_load(-2, 2, 2, end = 3)
>>> b.load
-3*SingularityFunction(x, 0, -2) + 4*SingularityFunction(x, 2, -1)
property rotation_jumps

返回旋转铰链中旋转跳跃值的字典。旋转跳跃是旋转铰链中的旋转(以弧度为单位)。这可以看作是斜率图中的跳跃。

property second_moment

梁的惯性矩。

shear_force()[源代码][源代码]

返回一个表示 Beam 对象剪力曲线的 Singularity Function 表达式。

示例

有一根长度为30米的梁。在梁的末端施加了一个顺时针方向的120 Nm的力矩。在梁的起始点从顶部施加了一个8 N的点载荷。梁下方有两个简单的支撑。一个在末端,另一个在距离起点10米处。两个支撑点的挠度都被限制。

使用向上的力和顺时针力矩为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I = symbols('E, I')
>>> R1, R2 = symbols('R1, R2')
>>> b = Beam(30, E, I)
>>> b.apply_load(-8, 0, -1)
>>> b.apply_load(R1, 10, -1)
>>> b.apply_load(R2, 30, -1)
>>> b.apply_load(120, 30, -2)
>>> b.bc_deflection = [(10, 0), (30, 0)]
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.shear_force()
8*SingularityFunction(x, 0, 0) - 6*SingularityFunction(x, 10, 0) - 120*SingularityFunction(x, 30, -1) - 2*SingularityFunction(x, 30, 0)
shear_stress()[源代码][源代码]

返回表示 Beam 对象剪应力曲线的表达式。

slope()[源代码][源代码]

返回一个表示梁对象弹性曲线斜率的奇异函数表达式。

示例

有一根长度为30米的梁。在梁的末端施加了一个顺时针方向的120 Nm的力矩。在梁的起始点从顶部施加了一个8 N的点载荷。梁下方有两个简单的支撑。一个在末端,另一个在距离起点10米处。两个支撑点的挠度都被限制。

使用向上的力和顺时针力矩为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I = symbols('E, I')
>>> R1, R2 = symbols('R1, R2')
>>> b = Beam(30, E, I)
>>> b.apply_load(-8, 0, -1)
>>> b.apply_load(R1, 10, -1)
>>> b.apply_load(R2, 30, -1)
>>> b.apply_load(120, 30, -2)
>>> b.bc_deflection = [(10, 0), (30, 0)]
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.slope()
(-4*SingularityFunction(x, 0, 2) + 3*SingularityFunction(x, 10, 2)
    + 120*SingularityFunction(x, 30, 1) + SingularityFunction(x, 30, 2) + 4000/3)/(E*I)
solve_for_ild_moment(
distance,
value,
*reactions,
)[源代码][源代码]

确定在移动载荷作用下,指定点处的弯矩影响线图方程。

参数:
距离整数

确定方程所需的点与梁起点的距离

整数

移动载荷的量级

反应

施加在梁上的反作用力。

示例

有一根长度为12米的梁。梁下方有两个简单支座,一个在起点,另一个在距离起点8米处。计算在大小为1kN的移动载荷作用下,距离起点4米处的弯矩影响线方程。

使用向下力为正的符号约定。

>>> from sympy import symbols
>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> E, I = symbols('E, I')
>>> R_0, R_8 = symbols('R_0, R_8')
>>> b = Beam(12, E, I)
>>> p0 = b.apply_support(0, 'roller')
>>> p8 = b.apply_support(8, 'roller')
>>> b.solve_for_ild_reactions(1, R_0, R_8)
>>> b.solve_for_ild_moment(4, 1, R_0, R_8)
>>> b.ild_moment
-(4*SingularityFunction(a, 0, 0) - SingularityFunction(a, 0, 1) + SingularityFunction(a, 4, 1))*SingularityFunction(a, 4, 0)
- SingularityFunction(a, 0, 1)/2 + SingularityFunction(a, 4, 1) - 2*SingularityFunction(a, 12, 0)
- SingularityFunction(a, 12, 1)/2
solve_for_ild_reactions(value, *reactions)[源代码][源代码]

确定在移动载荷作用下的反力影响线图方程。

参数:
整数

移动载荷的量级

反应

施加在梁上的反作用力。

示例

有一根长度为10米的梁。梁下方有两个简单支撑,一个在梁的起点,另一个在梁的终点。计算在1kN移动载荷作用下的反力影响线方程。

使用向下力为正的符号约定。

>>> from sympy import symbols
>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> E, I = symbols('E, I')
>>> R_0, R_10 = symbols('R_0, R_10')
>>> b = Beam(10, E, I)
>>> p0 = b.apply_support(0, 'pin')
>>> p10 = b.apply_support(10, 'roller')
>>> b.solve_for_ild_reactions(1,R_0,R_10)
>>> b.ild_reactions
{R_0: -SingularityFunction(a, 0, 0) + SingularityFunction(a, 0, 1)/10 - SingularityFunction(a, 10, 1)/10,
R_10: -SingularityFunction(a, 0, 1)/10 + SingularityFunction(a, 10, 0) + SingularityFunction(a, 10, 1)/10}
solve_for_ild_shear(
distance,
value,
*reactions,
)[源代码][源代码]

确定在移动荷载作用下,指定点的剪力影响线图方程。

参数:
距离整数

确定方程所需的点与梁起点的距离

整数

移动载荷的量级

反应

施加在梁上的反作用力。

示例

有一根长度为12米的梁。梁下方有两个简单支撑,一个在起点,另一个在距离起点8米处。计算在1kN移动载荷作用下,距离起点4米处的剪力影响线方程。

使用向下力为正的符号约定。

>>> from sympy import symbols
>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> E, I = symbols('E, I')
>>> R_0, R_8 = symbols('R_0, R_8')
>>> b = Beam(12, E, I)
>>> p0 = b.apply_support(0, 'roller')
>>> p8 = b.apply_support(8, 'roller')
>>> b.solve_for_ild_reactions(1, R_0, R_8)
>>> b.solve_for_ild_shear(4, 1, R_0, R_8)
>>> b.ild_shear
-(-SingularityFunction(a, 0, 0) + SingularityFunction(a, 12, 0) + 2)*SingularityFunction(a, 4, 0)
- SingularityFunction(-a, 0, 0) - SingularityFunction(a, 0, 0) + SingularityFunction(a, 0, 1)/8
+ SingularityFunction(a, 12, 0)/2 - SingularityFunction(a, 12, 1)/8 + 1
solve_for_reaction_loads(*reactions)[源代码][源代码]

求解反作用力。

示例

有一根长度为30米的梁。在梁的末端施加了一个顺时针方向的120 Nm的力矩。在梁的起始点从顶部施加了一个8 N的点载荷。梁下方有两个简单的支撑。一个在末端,另一个在距离起点10米处。两个支撑点的挠度都被限制。

使用向上的力和顺时针力矩为正的符号约定。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I = symbols('E, I')
>>> R1, R2 = symbols('R1, R2')
>>> b = Beam(30, E, I)
>>> b.apply_load(-8, 0, -1)
>>> b.apply_load(R1, 10, -1)  # Reaction force at x = 10
>>> b.apply_load(R2, 30, -1)  # Reaction force at x = 30
>>> b.apply_load(120, 30, -2)
>>> b.bc_deflection = [(10, 0), (30, 0)]
>>> b.load
R1*SingularityFunction(x, 10, -1) + R2*SingularityFunction(x, 30, -1)
    - 8*SingularityFunction(x, 0, -1) + 120*SingularityFunction(x, 30, -2)
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.reaction_loads
{R1: 6, R2: 2}
>>> b.load
-8*SingularityFunction(x, 0, -1) + 6*SingularityFunction(x, 10, -1)
    + 120*SingularityFunction(x, 30, -2) + 2*SingularityFunction(x, 30, -1)
property variable

一个符号,可以在梁的长度上用作变量,同时表示载荷分布、剪力曲线、弯矩、斜率曲线和挠度曲线。默认情况下,它设置为 Symbol('x'),但此属性是可变的。

示例

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I, A = symbols('E, I, A')
>>> x, y, z = symbols('x, y, z')
>>> b = Beam(4, E, I)
>>> b.variable
x
>>> b.variable = y
>>> b.variable
y
>>> b = Beam(4, E, I, A, z)
>>> b.variable
z
class sympy.physics.continuum_mechanics.beam.Beam3D(
length,
elastic_modulus,
shear_modulus,
second_moment,
area,
variable=x,
)[源代码][源代码]

此类处理在三维空间任意方向施加的载荷,以及沿不同轴的不等二次矩值。

备注

在解决梁弯曲问题时,必须使用一致的符号约定;结果将自动遵循所选的符号约定。此类假设任何类型的分布载荷/弯矩在整个梁跨度上施加。

属性:
applied_loads

返回施加在梁对象上的所有载荷的列表。

area

梁的横截面积。

bc_bending_moment
bc_deflection
bc_shear_force
bc_slope
boundary_conditions

返回应用于梁的边界条件字典。

cross_section

梁的横截面

deflection_jumps

返回滑动铰链中的偏转跳跃,以字典形式表示。

elastic_modulus

梁的杨氏模量。

ild_deflection_jumps

返回 I.L.D.

ild_moment

返回 I.L.D.

ild_reactions

返回 I.L.D.

ild_rotation_jumps

返回 I.L.D.

ild_shear

返回 I.L.D.

length

梁的长度。

load

返回一个表示梁对象载荷分布曲线的奇异函数表达式。

load_vector

返回一个表示载荷向量的三元素列表。

moment_load_vector

返回一个三元素列表,表示梁上的力矩载荷。

reaction_loads

返回一个字典中的反作用力。

rotation_jumps

返回旋转铰链中旋转跳跃的值,以字典形式。

second_moment

梁的惯性矩。

shear_modulus

梁的杨氏模量。

variable

一个可以沿梁的长度用作变量的符号,同时表示荷载分布、剪力曲线、弯矩、斜率曲线和挠度曲线。

方法

angular_deflection()

返回一个函数 x ,描述由于 x 轴上的力矩引起的梁的角偏转如何随 x 变化。

apply_load(value, start, order[, dir])

此方法将力载荷添加到特定的梁对象。

apply_moment_load(value, start, order[, dir])

此方法将力矩载荷加到特定的梁对象上。

apply_rotation_hinge(loc)

此方法在梁的单个位置应用旋转铰链。

apply_sliding_hinge(loc)

此方法在梁的单一位置应用滑动铰链。

apply_support(loc[, type])

axial_force()

返回 Beam 对象内部存在的轴向剪切力的表达式。

axial_stress()

返回 Beam 对象内部存在的轴向应力的表达式。

bending_moment()

返回一个包含三个表达式的列表,这些表达式表示沿 Beam 对象所有三个轴的弯矩曲线。

deflection()

返回一个三元素列表,表示沿所有三个轴的挠曲线。

draw([pictorial])

返回一个表示梁的梁图的绘图对象。

join(beam[, via])

此方法将两个梁连接起来,形成一个新的复合梁系统。

max_bending_moment()

返回梁对象中所有方向上的最大弯矩点及其对应的弯矩值,作为一个列表。

max_bmoment()

返回梁对象中所有方向上的最大弯矩点及其对应的弯矩值,作为一个列表。

max_deflection()

返回梁对象中所有方向上的最大挠度点及其对应的挠度值,作为一个列表。

max_shear_force()

返回梁对象中所有方向上的最大剪切力点及其对应的剪切值,作为一个列表。

plot_bending_moment([dir, subs])

返回沿 Beam 对象中所有三个方向的弯矩图。

plot_deflection([dir, subs])

返回一个针对 Beam 对象中所有三个方向的偏转图。

plot_ild_moment([subs])

绘制在移动荷载作用下的弯矩影响线图。

plot_ild_reactions([subs])

绘制在移动载荷作用下的反力影响线图。

plot_ild_shear([subs])

绘制在移动荷载作用下的剪力影响线图。

plot_loading_results([dir, subs])

返回指定方向上梁对象的剪力、弯矩、斜率和挠度的子图。

plot_shear_force([dir, subs])

返回一个沿梁对象中所有三个方向的剪力图。

plot_shear_stress([dir, subs])

返回一个沿梁对象中所有三个方向的剪应力图。

plot_slope([dir, subs])

返回一个沿 Beam 对象中所有三个方向的斜率图。

point_cflexure()

返回一组弯矩为零的点,并且这些点是梁对象的弯矩曲线从负变正或从正变负的转折点。

polar_moment()

返回梁相对于质心的X轴的极惯性矩。

remove_load(value, start, order[, end])

此方法移除梁对象上的特定载荷。

shear_force()

返回一个包含三个表达式的列表,这些表达式表示沿所有三个轴的 Beam 对象的剪力曲线。

shear_stress()

返回一个包含三个表达式的列表,这些表达式表示沿所有三个轴的 Beam 对象的剪应力曲线。

slope()

返回一个三元素列表,表示沿所有三个轴的挠曲线斜率。

solve_for_ild_moment(distance, value, *reactions)

确定在移动载荷作用下,指定点处的弯矩影响线图方程。

solve_for_ild_reactions(value, *reactions)

确定在移动载荷作用下的反力影响线图方程。

solve_for_ild_shear(distance, value, *reactions)

确定在移动荷载作用下,指定点的剪力影响线图方程。

solve_for_reaction_loads(*reaction)

求解反作用力。

solve_for_torsion()

求解由于在x方向(即进出梁的方向)施加的力矩引起的扭转效应导致的角偏转。

torsional_moment()

返回梁对象内部存在的扭矩表达式。

solve_slope_deflection

参考文献

示例

有一个长度为 l 米的梁。从梁的起点到终点,沿 y 轴施加了一个大小为 q 的恒定分布载荷。从梁的起点到终点,沿 z 轴还施加了一个大小为 m 的恒定分布力矩。梁的两端固定。因此,梁在两端的挠度受到限制。

>>> from sympy.physics.continuum_mechanics.beam import Beam3D
>>> from sympy import symbols, simplify, collect, factor
>>> l, E, G, I, A = symbols('l, E, G, I, A')
>>> b = Beam3D(l, E, G, I, A)
>>> x, q, m = symbols('x, q, m')
>>> b.apply_load(q, 0, 0, dir="y")
>>> b.apply_moment_load(m, 0, -1, dir="z")
>>> b.shear_force()
[0, -q*x, 0]
>>> b.bending_moment()
[0, 0, -m*x + q*x**2/2]
>>> b.bc_slope = [(0, [0, 0, 0]), (l, [0, 0, 0])]
>>> b.bc_deflection = [(0, [0, 0, 0]), (l, [0, 0, 0])]
>>> b.solve_slope_deflection()
>>> factor(b.slope())
[0, 0, x*(-l + x)*(-A*G*l**3*q + 2*A*G*l**2*q*x - 12*E*I*l*q
    - 72*E*I*m + 24*E*I*q*x)/(12*E*I*(A*G*l**2 + 12*E*I))]
>>> dx, dy, dz = b.deflection()
>>> dy = collect(simplify(dy), x)
>>> dx == dz == 0
True
>>> dy == (x*(12*E*I*l*(A*G*l**2*q - 2*A*G*l*m + 12*E*I*q)
... + x*(A*G*l*(3*l*(A*G*l**2*q - 2*A*G*l*m + 12*E*I*q) + x*(-2*A*G*l**2*q + 4*A*G*l*m - 24*E*I*q))
... + A*G*(A*G*l**2 + 12*E*I)*(-2*l**2*q + 6*l*m - 4*m*x + q*x**2)
... - 12*E*I*q*(A*G*l**2 + 12*E*I)))/(24*A*E*G*I*(A*G*l**2 + 12*E*I)))
True
angular_deflection()[源代码][源代码]

返回一个函数 x ,描述由于 x 轴上的力矩引起的梁的角偏转如何随 x 变化。

apply_load(value, start, order, dir='y')[源代码][源代码]

此方法将力载荷添加到特定的梁对象。

参数:
Sympifyable

施加载荷的大小。

目录字符串

施加载荷的轴。

顺序整数

应用载荷的顺序。 - 对于点载荷,order=-1 - 对于恒定分布载荷,order=0 - 对于斜坡载荷,order=1 - 对于抛物线斜坡载荷,order=2 - … 以此类推。

apply_moment_load(
value,
start,
order,
dir='y',
)[源代码][源代码]

此方法将力矩载荷加到特定的梁对象上。

参数:
Sympifyable

施加力矩的大小。

目录字符串

施加力矩的轴。

顺序整数

应用载荷的顺序。 - 对于点矩,order=-2 - 对于恒定分布矩,order=-1 - 对于斜坡矩,order=0 - 对于抛物线斜坡矩,order=1 - … 以此类推。

property area

梁的横截面积。

axial_force()[源代码][源代码]

返回 Beam 对象内部存在的轴向剪切力的表达式。

axial_stress()[源代码][源代码]

返回 Beam 对象内部存在的轴向应力的表达式。

bending_moment()[源代码][源代码]

返回一个包含三个表达式的列表,这些表达式表示沿 Beam 对象所有三个轴的弯矩曲线。

property boundary_conditions

返回一个应用于梁的边界条件字典。该字典有两个关键词,即 slope 和 deflection。每个关键词的值是一个元组列表,其中每个元组包含边界条件的位置和值,格式为 (位置, 值)。进一步地,每个值是对应于该位置沿三个轴的斜率或挠度值的列表。

示例

有一根长度为4米的梁。在0处,沿x轴的斜率为4,沿其他轴的斜率为0。在梁的另一端,沿所有三个轴的偏转应为零。

>>> from sympy.physics.continuum_mechanics.beam import Beam3D
>>> from sympy import symbols
>>> l, E, G, I, A, x = symbols('l, E, G, I, A, x')
>>> b = Beam3D(30, E, G, I, A, x)
>>> b.bc_slope = [(0, (4, 0, 0))]
>>> b.bc_deflection = [(4, [0, 0, 0])]
>>> b.boundary_conditions
{'bending_moment': [], 'deflection': [(4, [0, 0, 0])], 'shear_force': [], 'slope': [(0, (4, 0, 0))]}

在这里,梁的偏转在 4 处应沿所有三个轴为 0。同样,梁的斜率在 0 处应沿 x 轴为 4,沿 y 轴和 z 轴为 0

deflection()[源代码][源代码]

返回一个三元素列表,表示沿所有三个轴的挠曲线。

property load_vector

返回一个表示载荷向量的三元素列表。

max_bending_moment()[源代码][源代码]

返回 Beam 对象中所有方向上的最大弯矩点及其对应的弯矩值,作为一个列表返回。在使用此函数之前,必须先调用 solve_for_reaction_loads()。

示例

有一根长度为20米的梁。它的两端由滚轮支撑。沿y轴施加了一个斜率为12的线性载荷。沿z轴从起点到终点施加了一个大小为15N的恒定分布载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam3D
>>> from sympy import symbols
>>> l, E, G, I, A, x = symbols('l, E, G, I, A, x')
>>> b = Beam3D(20, 40, 21, 100, 25, x)
>>> b.apply_load(15, start=0, order=0, dir="z")
>>> b.apply_load(12*x, start=0, order=0, dir="y")
>>> b.bc_deflection = [(0, [0, 0, 0]), (20, [0, 0, 0])]
>>> R1, R2, R3, R4 = symbols('R1, R2, R3, R4')
>>> b.apply_load(R1, start=0, order=-1, dir="z")
>>> b.apply_load(R2, start=20, order=-1, dir="z")
>>> b.apply_load(R3, start=0, order=-1, dir="y")
>>> b.apply_load(R4, start=20, order=-1, dir="y")
>>> b.solve_for_reaction_loads(R1, R2, R3, R4)
>>> b.max_bending_moment()
[(0, 0), (20, 3000), (20, 16000)]
max_bmoment()[源代码]

返回 Beam 对象中所有方向上的最大弯矩点及其对应的弯矩值,作为一个列表返回。在使用此函数之前,必须先调用 solve_for_reaction_loads()。

示例

有一根长度为20米的梁。它的两端由滚轮支撑。沿y轴施加了一个斜率为12的线性载荷。沿z轴从起点到终点施加了一个大小为15N的恒定分布载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam3D
>>> from sympy import symbols
>>> l, E, G, I, A, x = symbols('l, E, G, I, A, x')
>>> b = Beam3D(20, 40, 21, 100, 25, x)
>>> b.apply_load(15, start=0, order=0, dir="z")
>>> b.apply_load(12*x, start=0, order=0, dir="y")
>>> b.bc_deflection = [(0, [0, 0, 0]), (20, [0, 0, 0])]
>>> R1, R2, R3, R4 = symbols('R1, R2, R3, R4')
>>> b.apply_load(R1, start=0, order=-1, dir="z")
>>> b.apply_load(R2, start=20, order=-1, dir="z")
>>> b.apply_load(R3, start=0, order=-1, dir="y")
>>> b.apply_load(R4, start=20, order=-1, dir="y")
>>> b.solve_for_reaction_loads(R1, R2, R3, R4)
>>> b.max_bending_moment()
[(0, 0), (20, 3000), (20, 16000)]
max_deflection()[源代码][源代码]

返回梁对象中所有方向上的最大挠度点及其对应的挠度值,作为一个列表。在使用此函数之前,必须先调用 solve_for_reaction_loads() 和 solve_slope_deflection()。

示例

有一根长度为20米的梁。它的两端由滚轮支撑。沿y轴施加了一个斜率为12的线性载荷。沿z轴从起点到终点施加了一个大小为15N的恒定分布载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam3D
>>> from sympy import symbols
>>> l, E, G, I, A, x = symbols('l, E, G, I, A, x')
>>> b = Beam3D(20, 40, 21, 100, 25, x)
>>> b.apply_load(15, start=0, order=0, dir="z")
>>> b.apply_load(12*x, start=0, order=0, dir="y")
>>> b.bc_deflection = [(0, [0, 0, 0]), (20, [0, 0, 0])]
>>> R1, R2, R3, R4 = symbols('R1, R2, R3, R4')
>>> b.apply_load(R1, start=0, order=-1, dir="z")
>>> b.apply_load(R2, start=20, order=-1, dir="z")
>>> b.apply_load(R3, start=0, order=-1, dir="y")
>>> b.apply_load(R4, start=20, order=-1, dir="y")
>>> b.solve_for_reaction_loads(R1, R2, R3, R4)
>>> b.solve_slope_deflection()
>>> b.max_deflection()
[(0, 0), (10, 495/14), (-10 + 10*sqrt(10793)/43, (10 - 10*sqrt(10793)/43)**3/160 - 20/7 + (10 - 10*sqrt(10793)/43)**4/6400 + 20*sqrt(10793)/301 + 27*(10 - 10*sqrt(10793)/43)**2/560)]
max_shear_force()[源代码][源代码]

返回沿梁对象所有方向的最大剪切力点及其对应的剪切值,作为列表返回。在使用此函数之前,必须先调用 solve_for_reaction_loads()。

示例

有一根长度为20米的梁。它的两端由滚轮支撑。沿y轴施加了一个斜率为12的线性载荷。沿z轴从起点到终点施加了一个大小为15N的恒定分布载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam3D
>>> from sympy import symbols
>>> l, E, G, I, A, x = symbols('l, E, G, I, A, x')
>>> b = Beam3D(20, 40, 21, 100, 25, x)
>>> b.apply_load(15, start=0, order=0, dir="z")
>>> b.apply_load(12*x, start=0, order=0, dir="y")
>>> b.bc_deflection = [(0, [0, 0, 0]), (20, [0, 0, 0])]
>>> R1, R2, R3, R4 = symbols('R1, R2, R3, R4')
>>> b.apply_load(R1, start=0, order=-1, dir="z")
>>> b.apply_load(R2, start=20, order=-1, dir="z")
>>> b.apply_load(R3, start=0, order=-1, dir="y")
>>> b.apply_load(R4, start=20, order=-1, dir="y")
>>> b.solve_for_reaction_loads(R1, R2, R3, R4)
>>> b.max_shear_force()
[(0, 0), (20, 2400), (20, 300)]
property moment_load_vector

返回一个三元素列表,表示梁上的力矩载荷。

plot_bending_moment(dir='all', subs=None)[源代码][源代码]

返回沿 Beam 对象中所有三个方向的弯矩图。

参数:
目录字符串 (默认)“全部”)

需要绘制弯矩图的方向。如果未指定方向,则显示所有图。

subs字典

包含符号作为键及其对应值的Python字典。

示例

有一根长度为20米的梁。它的两端由滚轮支撑。沿y轴施加了一个斜率为12的线性载荷。沿z轴从起点到终点施加了一个大小为15N的恒定分布载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam3D
>>> from sympy import symbols
>>> l, E, G, I, A, x = symbols('l, E, G, I, A, x')
>>> b = Beam3D(20, E, G, I, A, x)
>>> b.apply_load(15, start=0, order=0, dir="z")
>>> b.apply_load(12*x, start=0, order=0, dir="y")
>>> b.bc_deflection = [(0, [0, 0, 0]), (20, [0, 0, 0])]
>>> R1, R2, R3, R4 = symbols('R1, R2, R3, R4')
>>> b.apply_load(R1, start=0, order=-1, dir="z")
>>> b.apply_load(R2, start=20, order=-1, dir="z")
>>> b.apply_load(R3, start=0, order=-1, dir="y")
>>> b.apply_load(R4, start=20, order=-1, dir="y")
>>> b.solve_for_reaction_loads(R1, R2, R3, R4)
>>> b.plot_bending_moment()
PlotGrid object containing:
Plot[0]:Plot object containing:
[0]: cartesian line: 0 for x over (0.0, 20.0)
Plot[1]:Plot object containing:
[0]: cartesian line: -15*x**2/2 for x over (0.0, 20.0)
Plot[2]:Plot object containing:
[0]: cartesian line: 2*x**3 for x over (0.0, 20.0)

(png, hires.png, pdf)

../../../_images/beam-18.png
plot_deflection(dir='all', subs=None)[源代码][源代码]

返回一个针对 Beam 对象中所有三个方向的偏转图。

参数:
目录字符串 (默认)“全部”)

需要偏转图的方向。如果没有指定方向,则显示所有图。

subs字典

包含符号作为键及其对应值的Python字典。

示例

有一根长度为20米的梁。它的两端由滚轮支撑。沿y轴施加了一个斜率为12的线性载荷。沿z轴从起点到终点施加了一个大小为15N的恒定分布载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam3D
>>> from sympy import symbols
>>> l, E, G, I, A, x = symbols('l, E, G, I, A, x')
>>> b = Beam3D(20, 40, 21, 100, 25, x)
>>> b.apply_load(15, start=0, order=0, dir="z")
>>> b.apply_load(12*x, start=0, order=0, dir="y")
>>> b.bc_deflection = [(0, [0, 0, 0]), (20, [0, 0, 0])]
>>> R1, R2, R3, R4 = symbols('R1, R2, R3, R4')
>>> b.apply_load(R1, start=0, order=-1, dir="z")
>>> b.apply_load(R2, start=20, order=-1, dir="z")
>>> b.apply_load(R3, start=0, order=-1, dir="y")
>>> b.apply_load(R4, start=20, order=-1, dir="y")
>>> b.solve_for_reaction_loads(R1, R2, R3, R4)
>>> b.solve_slope_deflection()
>>> b.plot_deflection()
PlotGrid object containing:
Plot[0]:Plot object containing:
[0]: cartesian line: 0 for x over (0.0, 20.0)
Plot[1]:Plot object containing:
[0]: cartesian line: x**5/40000 - 4013*x**3/90300 + 26*x**2/43 + 1520*x/903 for x over (0.0, 20.0)
Plot[2]:Plot object containing:
[0]: cartesian line: x**4/6400 - x**3/160 + 27*x**2/560 + 2*x/7 for x over (0.0, 20.0)

(png, hires.png, pdf)

../../../_images/beam-19.png
plot_loading_results(dir='x', subs=None)[源代码][源代码]

返回指定方向上梁对象的剪力、弯矩、斜率和挠度的子图。

参数:
目录字符串 (默认)x

所需的绘图方向。如果没有指定方向,则显示沿x轴的图。

subs字典

包含符号作为键及其对应值的Python字典。

示例

有一根长度为20米的梁。它的两端由滚轮支撑。沿y轴施加了一个斜率为12的线性载荷。沿z轴从起点到终点施加了一个大小为15N的恒定分布载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam3D
>>> from sympy import symbols
>>> l, E, G, I, A, x = symbols('l, E, G, I, A, x')
>>> b = Beam3D(20, E, G, I, A, x)
>>> subs = {E:40, G:21, I:100, A:25}
>>> b.apply_load(15, start=0, order=0, dir="z")
>>> b.apply_load(12*x, start=0, order=0, dir="y")
>>> b.bc_deflection = [(0, [0, 0, 0]), (20, [0, 0, 0])]
>>> R1, R2, R3, R4 = symbols('R1, R2, R3, R4')
>>> b.apply_load(R1, start=0, order=-1, dir="z")
>>> b.apply_load(R2, start=20, order=-1, dir="z")
>>> b.apply_load(R3, start=0, order=-1, dir="y")
>>> b.apply_load(R4, start=20, order=-1, dir="y")
>>> b.solve_for_reaction_loads(R1, R2, R3, R4)
>>> b.solve_slope_deflection()
>>> b.plot_loading_results('y',subs)
PlotGrid object containing:
Plot[0]:Plot object containing:
[0]: cartesian line: -6*x**2 for x over (0.0, 20.0)
Plot[1]:Plot object containing:
[0]: cartesian line: -15*x**2/2 for x over (0.0, 20.0)
Plot[2]:Plot object containing:
[0]: cartesian line: -x**3/1600 + 3*x**2/160 - x/8 for x over (0.0, 20.0)
Plot[3]:Plot object containing:
[0]: cartesian line: x**5/40000 - 4013*x**3/90300 + 26*x**2/43 + 1520*x/903 for x over (0.0, 20.0)

(png, hires.png, pdf)

../../../_images/beam-20.png
plot_shear_force(dir='all', subs=None)[源代码][源代码]

返回一个沿梁对象中所有三个方向的剪力图。

参数:
目录字符串 (默认)“全部”)

需要绘制剪力图的方向。如果未指定方向,则显示所有图。

subs字典

包含符号作为键及其对应值的Python字典。

示例

有一根长度为20米的梁。它的两端由滚轮支撑。沿y轴施加了一个斜率为12的线性载荷。沿z轴从起点到终点施加了一个大小为15N的恒定分布载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam3D
>>> from sympy import symbols
>>> l, E, G, I, A, x = symbols('l, E, G, I, A, x')
>>> b = Beam3D(20, E, G, I, A, x)
>>> b.apply_load(15, start=0, order=0, dir="z")
>>> b.apply_load(12*x, start=0, order=0, dir="y")
>>> b.bc_deflection = [(0, [0, 0, 0]), (20, [0, 0, 0])]
>>> R1, R2, R3, R4 = symbols('R1, R2, R3, R4')
>>> b.apply_load(R1, start=0, order=-1, dir="z")
>>> b.apply_load(R2, start=20, order=-1, dir="z")
>>> b.apply_load(R3, start=0, order=-1, dir="y")
>>> b.apply_load(R4, start=20, order=-1, dir="y")
>>> b.solve_for_reaction_loads(R1, R2, R3, R4)
>>> b.plot_shear_force()
PlotGrid object containing:
Plot[0]:Plot object containing:
[0]: cartesian line: 0 for x over (0.0, 20.0)
Plot[1]:Plot object containing:
[0]: cartesian line: -6*x**2 for x over (0.0, 20.0)
Plot[2]:Plot object containing:
[0]: cartesian line: -15*x for x over (0.0, 20.0)

(png, hires.png, pdf)

../../../_images/beam-21.png
plot_shear_stress(dir='all', subs=None)[源代码][源代码]

返回一个沿梁对象中所有三个方向的剪应力图。

参数:
目录字符串 (默认)“全部”)

需要绘制剪应力图的方向。如果未指定方向,则显示所有图。

subs字典

包含符号作为键及其对应值的Python字典。

示例

有一根长度为20米、横截面积为2平方米的梁。它的两端由滚轮支撑。沿y轴施加斜率为12的线性载荷。沿z轴从起点到终点施加大小为15牛的恒定分布载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam3D
>>> from sympy import symbols
>>> l, E, G, I, A, x = symbols('l, E, G, I, A, x')
>>> b = Beam3D(20, E, G, I, 2, x)
>>> b.apply_load(15, start=0, order=0, dir="z")
>>> b.apply_load(12*x, start=0, order=0, dir="y")
>>> b.bc_deflection = [(0, [0, 0, 0]), (20, [0, 0, 0])]
>>> R1, R2, R3, R4 = symbols('R1, R2, R3, R4')
>>> b.apply_load(R1, start=0, order=-1, dir="z")
>>> b.apply_load(R2, start=20, order=-1, dir="z")
>>> b.apply_load(R3, start=0, order=-1, dir="y")
>>> b.apply_load(R4, start=20, order=-1, dir="y")
>>> b.solve_for_reaction_loads(R1, R2, R3, R4)
>>> b.plot_shear_stress()
PlotGrid object containing:
Plot[0]:Plot object containing:
[0]: cartesian line: 0 for x over (0.0, 20.0)
Plot[1]:Plot object containing:
[0]: cartesian line: -3*x**2 for x over (0.0, 20.0)
Plot[2]:Plot object containing:
[0]: cartesian line: -15*x/2 for x over (0.0, 20.0)

(png, hires.png, pdf)

../../../_images/beam-22.png
plot_slope(dir='all', subs=None)[源代码][源代码]

返回一个沿 Beam 对象中所有三个方向的斜率图。

参数:
目录字符串 (默认)“全部”)

需要绘制斜率图的方向。如果没有指定方向,则显示所有图。

subs字典

包含符号作为键及其对应值的Python字典。

示例

有一根长度为20米的梁。它的两端由滚轮支撑。沿y轴施加了一个斜率为12的线性载荷。沿z轴从起点到终点施加了一个大小为15N的恒定分布载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam3D
>>> from sympy import symbols
>>> l, E, G, I, A, x = symbols('l, E, G, I, A, x')
>>> b = Beam3D(20, 40, 21, 100, 25, x)
>>> b.apply_load(15, start=0, order=0, dir="z")
>>> b.apply_load(12*x, start=0, order=0, dir="y")
>>> b.bc_deflection = [(0, [0, 0, 0]), (20, [0, 0, 0])]
>>> R1, R2, R3, R4 = symbols('R1, R2, R3, R4')
>>> b.apply_load(R1, start=0, order=-1, dir="z")
>>> b.apply_load(R2, start=20, order=-1, dir="z")
>>> b.apply_load(R3, start=0, order=-1, dir="y")
>>> b.apply_load(R4, start=20, order=-1, dir="y")
>>> b.solve_for_reaction_loads(R1, R2, R3, R4)
>>> b.solve_slope_deflection()
>>> b.plot_slope()
PlotGrid object containing:
Plot[0]:Plot object containing:
[0]: cartesian line: 0 for x over (0.0, 20.0)
Plot[1]:Plot object containing:
[0]: cartesian line: -x**3/1600 + 3*x**2/160 - x/8 for x over (0.0, 20.0)
Plot[2]:Plot object containing:
[0]: cartesian line: x**4/8000 - 19*x**2/172 + 52*x/43 for x over (0.0, 20.0)

(png, hires.png, pdf)

../../../_images/beam-23.png
polar_moment()[源代码][源代码]

返回梁相对于质心的X轴的极惯性矩。

示例

>>> from sympy.physics.continuum_mechanics.beam import Beam3D
>>> from sympy import symbols
>>> l, E, G, I, A = symbols('l, E, G, I, A')
>>> b = Beam3D(l, E, G, I, A)
>>> b.polar_moment()
2*I
>>> I1 = [9, 15]
>>> b = Beam3D(l, E, G, I1, A)
>>> b.polar_moment()
24
property second_moment

梁的惯性矩。

shear_force()[源代码][源代码]

返回一个包含三个表达式的列表,这些表达式表示沿所有三个轴的 Beam 对象的剪力曲线。

property shear_modulus

梁的杨氏模量。

shear_stress()[源代码][源代码]

返回一个包含三个表达式的列表,这些表达式表示沿所有三个轴的 Beam 对象的剪应力曲线。

slope()[源代码][源代码]

返回一个三元素列表,表示沿所有三个轴的挠曲线斜率。

solve_for_reaction_loads(*reaction)[源代码][源代码]

求解反作用力。

示例

有一根长度为30米的梁。它的两端由滚轮支撑。从起点到终点沿y轴施加一个大小为8N的恒定分布载荷。沿z轴施加一个斜率为9的线性载荷。

>>> from sympy.physics.continuum_mechanics.beam import Beam3D
>>> from sympy import symbols
>>> l, E, G, I, A, x = symbols('l, E, G, I, A, x')
>>> b = Beam3D(30, E, G, I, A, x)
>>> b.apply_load(8, start=0, order=0, dir="y")
>>> b.apply_load(9*x, start=0, order=0, dir="z")
>>> b.bc_deflection = [(0, [0, 0, 0]), (30, [0, 0, 0])]
>>> R1, R2, R3, R4 = symbols('R1, R2, R3, R4')
>>> b.apply_load(R1, start=0, order=-1, dir="y")
>>> b.apply_load(R2, start=30, order=-1, dir="y")
>>> b.apply_load(R3, start=0, order=-1, dir="z")
>>> b.apply_load(R4, start=30, order=-1, dir="z")
>>> b.solve_for_reaction_loads(R1, R2, R3, R4)
>>> b.reaction_loads
{R1: -120, R2: -120, R3: -1350, R4: -2700}
solve_for_torsion()[源代码][源代码]

求解由于在x方向(即进出梁的方向)施加的力矩引起的扭转效应导致的角偏转。

在这里,正扭矩意味着扭矩的方向是正的,即沿着梁轴线从梁中出来。同样,负扭矩表示扭矩进入梁的横截面。

示例

>>> from sympy.physics.continuum_mechanics.beam import Beam3D
>>> from sympy import symbols
>>> l, E, G, I, A, x = symbols('l, E, G, I, A, x')
>>> b = Beam3D(20, E, G, I, A, x)
>>> b.apply_moment_load(4, 4, -2, dir='x')
>>> b.apply_moment_load(4, 8, -2, dir='x')
>>> b.apply_moment_load(4, 8, -2, dir='x')
>>> b.solve_for_torsion()
>>> b.angular_deflection().subs(x, 3)
18/(G*I)
torsional_moment()[源代码][源代码]

返回梁对象内部存在的扭矩表达式。