用奇异函数求解梁弯曲问题#

要使此文档更易于阅读,请启用漂亮打印:

>>> from sympy import *
>>> x, y, z = symbols('x y z')
>>> init_printing(use_unicode=True, wrap_line=False)

#

平面梁是一种能够通过抵抗内部剪切和弯曲来承受荷载的结构单元。梁的特征在于其长度、约束条件、横截面面积二阶矩和弹性模量。在SymPy中,通过指定以下特性来构造二维梁对象:

  • 长度

  • 弹性模量

  • 面积二阶矩

  • 变量:表示沿梁长度的位置的符号。默认情况下,此设置为 Symbol(x) .

  • 边界条件
    • bc_slope:斜坡的边界条件。

    • bc_挠度:挠度的边界条件。

  • 负荷分配

一旦指定了上述内容,将使用以下方法计算有关受载梁的有用信息:

  • solve_for_reaction_loads()

  • shear_force()

  • bending_moment()

  • slope()

实例#

下面是各种二维梁弯曲问题的例子。

例1#

长度为9米的悬臂梁在5米距离内从固定端向下施加8 kN/m的分布恒定荷载。在距固定端5米处施加50 kN-m的逆时针力矩。最后,在梁的自由端施加12 kN的向下点荷载。

    y
    ^
    |
\\\\|
\\\\|    8 kN/m
\\\\|_________________
\\\\|| | | | | | | | |             12 kN
\\\\|V V V V V V V V V               |
\\\\|________________|_______________V
\\\\|                |               |
\\\\o - - - - - - - -⭯ 50 kN-m - - - | - - -> x
\\\\|________________|_______________|
\\\\|                                :
\\\\|----------------|---------------|
           5.0 m            4.0 m

备注

The user is free to choose their own sign convention. In this case the downward forces and counterclockwise bending moment being positive.

梁必须用长度、弹性模量和面积二阶矩初始化。这些量可以是符号或数字。

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> E, I = symbols('E, I')
>>> b = Beam(9, E, I)

The three loads are applied to the beam using the apply_load() method. This method supports point forces, point moments, and polynomial distributed loads of any order, i.e. \(c, cx, cx^2, cx^3, \ldots\).

在负方向上,多项式的顺序为1米处的负荷载:

>>> b.apply_load(12, 9, -1)

这个 load 属性可用于访问奇点函数形式的加载函数:

>>> b.load
          -1
12⋅<x - 9>

同样,正力矩可采用多项式阶数-2:

>>> b.apply_load(50, 5, -2)

分布荷载为0级,跨度为x=0至x=5:

>>> b.apply_load(8, 0, 0, end=5)

固定端施加两个边界条件:1)无垂直偏转;2)无旋转。通过附加x值的元组和相应的挠度或坡度值来指定这些值:

>>> b.bc_deflection.append((0, 0))
>>> b.bc_slope.append((0, 0))

这些边界条件引入了一个未知的反作用力和力矩,需要施加到梁上以保持静态平衡:

>>> R, M = symbols('R, M')
>>> b.apply_load(R, 0, -1)
>>> b.apply_load(M, 0, -2)
>>> b.load
     -2        -1        0             -2            0             -1
M⋅<x>   + R⋅<x>   + 8⋅<x>  + 50⋅<x - 5>   - 8⋅<x - 5>  + 12⋅<x - 9>

这两个变量可以根据施加的荷载进行求解,并可以显示最终荷载:

>>> b.solve_for_reaction_loads(R, M)
>>> b.reaction_loads
    {M: 158, R: -52}
>>> b.load
           -2         -1        0             -2            0             -1
    158⋅<x>   - 52⋅<x>   + 8⋅<x>  + 50⋅<x - 5>   - 8⋅<x - 5>  + 12⋅<x - 9>

此时,完全定义梁,并计算内部剪力和弯矩:

>>> b.shear_force()
          -1         0        1             -1            1             0
 - 158⋅<x>   + 52⋅<x>  - 8⋅<x>  - 50⋅<x - 5>   + 8⋅<x - 5>  - 12⋅<x - 9>
>>> b.bending_moment()
             0         1        2             0            2             1
    - 158⋅<x>  + 52⋅<x>  - 4⋅<x>  - 50⋅<x - 5>  + 4⋅<x - 5>  - 12⋅<x - 9>

这些可以通过调用相应的plot方法来可视化:

>>> b.plot_shear_force()  
>>> b.plot_bending_moment()  
../../../_images/beam_problems-11_00.png

(png, hires.png, pdf)#

../../../_images/beam_problems-11_01.png

(png, hires.png, pdf)#

梁在荷载作用下会变形,坡度和挠度可通过以下公式确定:

>>> b.slope()
  ⎛                            3                          3             ⎞
  ⎜         1         2   4⋅<x>              1   4⋅<x - 5>             2⎟
 -⎜- 158⋅<x>  + 26⋅<x>  - ────── - 50⋅<x - 5>  + ────────── - 6⋅<x - 9> ⎟
  ⎝                         3                        3                  ⎠
 ─────────────────────────────────────────────────────────────────────────
                                    E⋅I
>>> b.deflection()
  ⎛                  3      4                        4             ⎞
  ⎜        2   26⋅<x>    <x>              2   <x - 5>             3⎟
 -⎜- 79⋅<x>  + ─────── - ──── - 25⋅<x - 5>  + ──────── - 2⋅<x - 9> ⎟
  ⎝               3       3                      3                 ⎠
 ────────────────────────────────────────────────────────────────────
                                 E⋅I

只要提供模量和二阶矩的数字,就可以绘制梁的坡度和挠度:

>>> b.plot_slope(subs={E: 20E9, I: 3.25E-6})  
>>> b.plot_deflection(subs={E: 20E9, I: 3.25E-6})  
../../../_images/beam_problems-13_00.png

(png, hires.png, pdf)#

../../../_images/beam_problems-13_01.png

(png, hires.png, pdf)#

所有曲线图都可以在一个图中显示:

>>> b.plot_loading_results(subs={E: 20E9, I: 3.25E-6})  

(png, hires.png, pdf)

../../../_images/beam_problems-14.png

例2#

There is a beam of length 30 meters. A moment of magnitude 120 Nm is applied in the counter-clockwise direction at the end of the beam. A point load of magnitude 8 N is applied from the top of the beam at the starting point. There are two simple supports below the beam. One at the end and another one at a distance of 10 meters from the start. The deflection is restricted at both the supports.

|| 8 N                                       ⭯ 120 Nm
\/______________________________________________|
|_______________________________________________|
            /\                                 /\
|------------|---------------------------------|
    10 m                  20 m

备注

Using the sign convention of downward forces and counterclockwise moment being positive.

>>> 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.append((10, 0))
>>> b.bc_deflection.append((30, 0))
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.reaction_loads
    {R₁: -18, R₂: 10}
>>> b.load
         -1              -1               -2              -1
    8⋅<x>   - 18⋅<x - 10>   + 120⋅<x - 30>   + 10⋅<x - 30>
>>> b.shear_force()
           0              0               -1              0
    - 8⋅<x>  + 18⋅<x - 10>  - 120⋅<x - 30>   - 10⋅<x - 30>
>>> b.bending_moment()
           1              1               0              1
    - 8⋅<x>  + 18⋅<x - 10>  - 120⋅<x - 30>  - 10⋅<x - 30>
>>> b.slope()
         2             2               1             2   1600
    4⋅<x>  - 9⋅<x - 10>  + 120⋅<x - 30>  + 5⋅<x - 30>  - ────
                                                          3
    ─────────────────────────────────────────────────────────
                               E⋅I
>>> b.deflection()
                    3                                          3
      1600⋅x   4⋅<x>              3              2   5⋅<x - 30>
    - ────── + ────── - 3⋅<x - 10>  + 60⋅<x - 30>  + ─────────── + 4000
        3        3                                        3
    ───────────────────────────────────────────────────────────────────
                                    E⋅I

例3#

一根6米长的梁在开始处有一个滚柱支撑,在末端有一个铰链支撑。在梁的中间施加1.5 kN-m的逆时针力矩。从梁的中间到末端施加3 kN/m的恒定分布荷载和1 kN/m/m的斜坡荷载。

                            ramp load = 1 KN/m/m
                          constant load = 3 KN/m
                       |------------------------|
                     ⭯ 1.5 KN-m
 ______________________|________________________
|_______________________________________________|
o                      |                       /\
|----------------------|-----------------------|
        3.0 m                     3.0 m

备注

Using the sign convention of downward forces and counterclockwise moment being positive.

>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols, plot, S
>>> E, I = symbols('E, I')
>>> R1, R2 = symbols('R1, R2')
>>> b = Beam(6, E, I)
>>> b.apply_load(R1, 0, -1)
>>> b.apply_load(-S(3)/2, 3, -2)
>>> b.apply_load(3, 3, 0)
>>> b.apply_load(1, 3, 1)
>>> b.apply_load(R2, 6, -1)
>>> b.bc_deflection.append((0, 0))
>>> b.bc_deflection.append((6, 0))
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.reaction_loads
   {R₁: -11/4, R₂: -43/4}
>>> b.load
            -1            -2                                     -1
      11⋅<x>     3⋅<x - 3>              0          1   43⋅<x - 6>
    - ──────── - ─────────── + 3⋅<x - 3>  + <x - 3>  - ────────────
         4            2                                     4
>>> plot(b.load)  

(png, hires.png, pdf)

../../../_images/beam_problems-16.png
>>> b.shear_force()
            0            -1                       2             0
      11⋅<x>    3⋅<x - 3>              1   <x - 3>    43⋅<x - 6>
      ─────── + ─────────── - 3⋅<x - 3>  - ──────── + ───────────
         4           2                        2            4
>>> b.bending_moment()
            1            0            2          3             1
      11⋅<x>    3⋅<x - 3>    3⋅<x - 3>    <x - 3>    43⋅<x - 6>
      ─────── + ────────── - ────────── - ──────── + ───────────
         4          2            2           6            4
>>> b.slope()
            2            1          3          4             2
      11⋅<x>    3⋅<x - 3>    <x - 3>    <x - 3>    43⋅<x - 6>    78
    - ─────── - ────────── + ──────── + ──────── - ─────────── + ──
         8          2           2          24           8        5
    ───────────────────────────────────────────────────────────────
                                 E⋅I
>>> b.deflection()
                 3            2          4          5             3
    78⋅x   11⋅<x>    3⋅<x - 3>    <x - 3>    <x - 3>    43⋅<x - 6>
    ──── - ─────── - ────────── + ──────── + ──────── - ───────────
     5        24         4           8         120           24
    ───────────────────────────────────────────────────────────────
                                 E⋅I

例4#

长度为8米的悬挑梁固定在距起点1米处,并在另一端前1米用滚轴支撑。从起点到距起点2米处,承受10 KN/m的分布恒载。在距起点5米和7.5米处分别施加20KN和8KN的两点荷载。

                                      ---> x
                                      |
                                      v y
  10 KN/m
_____________                 20 KN         8 KN
| | | | | | |                  |             |
V V V V V V V                  V             V
 _______________________________________________
|_______________________________________________|
      /\                                  O
|-----|------|-----------------|----------|--|--|
   1m    1m          3m              2m   .5m .5m
>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E,I,M,V = symbols('E I M V')
>>> b = Beam(8, E, I)
>>> E,I,R1,R2 = symbols('E I R1 R2')
>>> b.apply_load(R1, 1, -1)
>>> b.apply_load(R2, 7, -1)
>>> b.apply_load(10, 0, 0, end=2)
>>> b.apply_load(20, 5, -1)
>>> b.apply_load(8, 7.5, -1)
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.reaction_loads
{R₁: -26, R₂: -22}
>>> b.load
      0             -1             0             -1             -1              -1
10⋅<x>  - 26⋅<x - 1>   - 10⋅<x - 2>  + 20⋅<x - 5>   - 22⋅<x - 7>   + 8⋅<x - 7.5>

>>> b.shear_force()
        1             0             1             0             0              0
- 10⋅<x>  + 26⋅<x - 1>  + 10⋅<x - 2>  - 20⋅<x - 5>  + 22⋅<x - 7>  - 8⋅<x - 7.5>

>>> b.bending_moment()
       2             1            2             1             1              1
- 5⋅<x>  + 26⋅<x - 1>  + 5⋅<x - 2>  - 20⋅<x - 5>  + 22⋅<x - 7>  - 8⋅<x - 7.5>

>>> b.bc_deflection = [(1, 0), (7, 0)]
>>> b.slope()
     3                          3
5⋅<x>              2   5⋅<x - 2>              2             2              2   679
────── - 13⋅<x - 1>  - ────────── + 10⋅<x - 5>  - 11⋅<x - 7>  + 4⋅<x - 7.5>  + ───
  3                        3                                                    24
──────────────────────────────────────────────────────────────────────────────────
                                                E⋅I
>>> b.deflection()
             4             3            4             3             3              3
679⋅x   5⋅<x>    13⋅<x - 1>    5⋅<x - 2>    10⋅<x - 5>    11⋅<x - 7>    4⋅<x - 7.5>    689
───── + ────── - ─────────── - ────────── + ─────────── - ─────────── + ──────────── - ───
  24      12          3            12            3             3             3          24
──────────────────────────────────────────────────────────────────────────────────────────
                                           E⋅I

例5#

长度为6米的悬臂梁承受从起点到距其2米处4.0 KN/m的向下分布恒载。从梁的中间到末端施加1 kN/m/m的斜坡荷载。在距起点4米的同一方向上也施加12KN的点荷载。

  ---> x                             .
  |                                . |
  v y                    12 KN   . | |
                           |   . | | |
                           V . | | | |
\\\\|   4 KN/m             . | | | | |
\\\\|___________         . 1 KN/m/m| |
\\\\|| | | | | |       . V V V V V V V
\\\\|V V V V V V     |---------------|
\\\\|________________________________
\\\\|________________________________|
\\\\|          :          :          :
\\\\|----------|-----|----|----------|
        2.0 m     1m   1m      2.0 m
>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E,I,M,V = symbols('E I M V')
>>> b = Beam(6, E, I)
>>> b.apply_load(V, 0, -1)
>>> b.apply_load(M, 0, -2)
>>> b.apply_load(4, 0, 0, end=2)
>>> b.apply_load(12, 4, -1)
>>> b.apply_load(1, 3, 1, end=6)
>>> b.solve_for_reaction_loads(V, M)
>>> b.reaction_loads
{M: 157/2, V: -49/2}
>>> b.load
       -2         -1
157⋅<x>     49⋅<x>          0            0          1             -1            0          1
───────── - ──────── + 4⋅<x>  - 4⋅<x - 2>  + <x - 3>  + 12⋅<x - 4>   - 3⋅<x - 6>  - <x - 6>
    2          2
>>> b.shear_force()
          -1         0                                2                                     2
   157⋅<x>     49⋅<x>        1            1    <x - 3>             0            1    <x - 6>
- ───────── + ─────── - 4⋅<x>  + 4⋅<x - 2>  - ──────── - 12⋅<x - 4>  + 3⋅<x - 6>  + ────────
      2          2                                2                                    2
>>> b.bending_moment()
         0         1                                3                          2          3
  157⋅<x>    49⋅<x>         2            2   <x - 3>              1   3⋅<x - 6>    <x - 6>
- ──────── + ─────── - 2⋅<x>  + 2⋅<x - 2>  - ──────── - 12⋅<x - 4>  + ────────── + ────────
     2          2                               6                         2           6
>>> b.bc_deflection = [(0, 0)]
>>> b.bc_slope = [(0, 0)]
>>> b.slope()
 ⎛         1         2        3            3          4                       3          4⎞
 ⎜  157⋅<x>    49⋅<x>    2⋅<x>    2⋅<x - 2>    <x - 3>             2   <x - 6>    <x - 6> ⎟
-⎜- ──────── + ─────── - ────── + ────────── - ──────── - 6⋅<x - 4>  + ──────── + ────────⎟
 ⎝     2          4        3          3           24                      2          24   ⎠
────────────────────────────────────────────────────────────────────────────────────────────
                                            E⋅I
>>> b.deflection()
 ⎛         2         3      4          4          5                       4          5⎞
 ⎜  157⋅<x>    49⋅<x>    <x>    <x - 2>    <x - 3>             3   <x - 6>    <x - 6> ⎟
-⎜- ──────── + ─────── - ──── + ──────── - ──────── - 2⋅<x - 4>  + ──────── + ────────⎟
 ⎝     4          12      6        6         120                      8         120   ⎠
────────────────────────────────────────────────────────────────────────────────────────
                                          E⋅I

例6#

长度为11米的悬挑梁在距起点2米至6米处承受2 KN/m的分布恒载。它被固定在起点上,并停留在离终点8米远的滚轴上。另外,在悬挑端施加5 KN-m的逆时针力矩。

               2 KN/m                         ---> x
           _________________                  |
           | | | | | | | | |                  v y
           V V V V V V V V V                        ⭯ 5 KN-m
  ____________________________________________________|
 O____________________________________________________|
/ \                                   /\
 |--------|----------------|----------|---------------|
     2m           4m            2m            3m
>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> R1, R2 = symbols('R1, R2')
>>> E, I = symbols('E, I')
>>> b = Beam(11, E, I)
>>> b.apply_load(R1, 0, -1)
>>> b.apply_load(2, 2, 0, end=6)
>>> b.apply_load(R2, 8, -1)
>>> b.apply_load(5, 11, -2)
>>> b.solve_for_reaction_loads(R1, R2)
>>> b.reaction_loads
{R₁: -37/8, R₂: -27/8}
>>> b.load
        -1                                       -1
  37⋅<x>              0            0   27⋅<x - 8>               -2
- ──────── + 2⋅<x - 2>  - 2⋅<x - 6>  - ──────────── + 5⋅<x - 11>
     8                                      8
>>> b.shear_force()
        0                                       0
  37⋅<x>             1            1   27⋅<x - 8>              -1
  ─────── - 2⋅<x - 2>  + 2⋅<x - 6>  + ─────────── - 5⋅<x - 11>
     8                                     8
>>> b.bending_moment()
        1                                   1
  37⋅<x>           2          2   27⋅<x - 8>              0
  ─────── - <x - 2>  + <x - 6>  + ─────────── - 5⋅<x - 11>
     8                                 8
>>> b.bc_deflection = [(0, 0), (8, 0)]
>>> b.slope()
        2          3          3             2
  37⋅<x>    <x - 2>    <x - 6>    27⋅<x - 8>              1
- ─────── + ──────── - ──────── - ─────────── + 5⋅<x - 11>  + 36
     16        3          3            16
────────────────────────────────────────────────────────────────
                              E⋅I
>>> b.deflection()
             3          4          4            3             2
       37⋅<x>    <x - 2>    <x - 6>    9⋅<x - 8>    5⋅<x - 11>
36⋅x - ─────── + ──────── - ──────── - ────────── + ───────────
          48        12         12          16            2
───────────────────────────────────────────────────────────────
                              E⋅I

例7#

有一根长横梁 l ,两端固定。集中的点荷载 F 在梁的中点向下应用。

                                      ^ y
                                      |
                                      ---> x
\\\\|                  F                  |\\\\
\\\\|                  |                  |\\\\
\\\\|                  V                  |\\\\
\\\\|_____________________________________|\\\\
\\\\|_____________________________________|\\\\
\\\\|                  :                  |\\\\
\\\\|                  :                  |\\\\
\\\\|------------------|------------------|\\\\
             l/2                l/2
>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I, F = symbols('E I F')
>>> l = symbols('l', positive=True)
>>> b = Beam(l, E, I)
>>> R1,R2 = symbols('R1  R2')
>>> M1, M2 = symbols('M1, M2')
>>> b.apply_load(R1, 0, -1)
>>> b.apply_load(M1, 0, -2)
>>> b.apply_load(R2, l, -1)
>>> b.apply_load(M2, l, -2)
>>> b.apply_load(-F, l/2, -1)
>>> b.bc_deflection = [(0, 0),(l, 0)]
>>> b.bc_slope = [(0, 0),(l, 0)]
>>> b.solve_for_reaction_loads(R1, R2, M1, M2)
>>> b.reaction_loads
⎧    -F⋅l       F⋅l      F      F⎫
⎨M₁: ─────, M₂: ───, R₁: ─, R₂: ─⎬
⎩      8         8       2      2⎭

>>> b.load
         -2               -2        -1              -1             -1
  F⋅l⋅<x>     F⋅l⋅<-l + x>     F⋅<x>          l          F⋅<-l + x>
- ───────── + ────────────── + ─────── - F⋅<- ─ + x>   + ────────────
      8             8             2           2               2

>>> b.shear_force()
         -1               -1        0              0             0
  F⋅l⋅<x>     F⋅l⋅<-l + x>     F⋅<x>         l         F⋅<-l + x>
  ───────── - ────────────── - ────── + F⋅<- ─ + x>  - ───────────
      8             8            2           2              2

>>> b.bending_moment()
         0               0        1              1             1
  F⋅l⋅<x>    F⋅l⋅<-l + x>    F⋅<x>         l         F⋅<-l + x>
  ──────── - ───────────── - ────── + F⋅<- ─ + x>  - ───────────
     8             8           2           2              2

>>> b.slope()
 ⎛                                               2              ⎞
 ⎜                                         l                    ⎟
 ⎜       1               1        2   F⋅<- ─ + x>              2⎟
 ⎜F⋅l⋅<x>    F⋅l⋅<-l + x>    F⋅<x>         2         F⋅<-l + x> ⎟
-⎜──────── - ───────────── - ────── + ──────────── - ───────────⎟
 ⎝   8             8           4           2              4     ⎠
──────────────────────────────────────────────────────────────────
                               E⋅I

>>> b.deflection()
 ⎛                                               3              ⎞
 ⎜                                         l                    ⎟
 ⎜       2               2        3   F⋅<- ─ + x>              3⎟
 ⎜F⋅l⋅<x>    F⋅l⋅<-l + x>    F⋅<x>         2         F⋅<-l + x> ⎟
-⎜──────── - ───────────── - ────── + ──────────── - ───────────⎟
 ⎝   16            16          12          6              12    ⎠
──────────────────────────────────────────────────────────────────
                               E⋅I

例8#

有一根长横梁 4*l 中间有一个铰链连接器。它在开始时有一个固定的支撑,并且在 l4*l 从起点开始。集中点荷载 P 也适用于 3*l 从起点开始。

                                                   ---> x
\\\\|                                 P            |
\\\\|                                 |            v y
\\\\|                                 V
\\\\|_____________________ _______________________
\\\\|_____________________O_______________________|
\\\\|          /\                     :          /\
\\\\|         oooo                    :         oooo
\\\\|----------|-----------|----------|-----------|
         l           l          l            l
>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I = symbols('E I')
>>> l = symbols('l', positive=True)
>>> R1, M1, R2, R3, P = symbols('R1 M1 R2 R3 P')
>>> b1 = Beam(2*l, E, I)
>>> b2 = Beam(2*l, E, I)
>>> b = b1.join(b2, "hinge")
>>> b.apply_load(M1, 0, -2)
>>> b.apply_load(R1, 0, -1)
>>> b.apply_load(R2, l, -1)
>>> b.apply_load(R3, 4*l, -1)
>>> b.apply_load(P, 3*l, -1)
>>> b.bc_slope = [(0, 0)]
>>> b.bc_deflection = [(0, 0), (l, 0), (4*l, 0)]
>>> b.solve_for_reaction_loads(M1, R1, R2, R3)
>>> b.reaction_loads
⎧    -P⋅l       3⋅P      -5⋅P       -P ⎫
⎨M₁: ─────, R₁: ───, R₂: ─────, R₃: ───⎬
⎩      4         4         4         2 ⎭

>>> b.load
         -2          -1               -1                                -1
  P⋅l⋅<x>     3⋅P⋅<x>     5⋅P⋅<-l + x>                 -1   P⋅<-4⋅l + x>
- ───────── + ───────── - ────────────── + P⋅<-3⋅l + x>   - ──────────────
      4           4             4                                 2

>>> b.shear_force()
         -1          0               0                               0
  P⋅l⋅<x>     3⋅P⋅<x>    5⋅P⋅<-l + x>                0   P⋅<-4⋅l + x>
  ───────── - ──────── + ───────────── - P⋅<-3⋅l + x>  + ─────────────
      4          4             4                               2

>>> b.bending_moment()
         0          1               1                               1
  P⋅l⋅<x>    3⋅P⋅<x>    5⋅P⋅<-l + x>                1   P⋅<-4⋅l + x>
  ──────── - ──────── + ───────────── - P⋅<-3⋅l + x>  + ─────────────
     4          4             4                               2

>>> b.slope()
⎛     2               2               2               2⎞               ⎛         1          2               2               2⎞        ⎛         1          2               2               2⎞
⎜5⋅P⋅l    P⋅<-2⋅l + x>    P⋅<-3⋅l + x>    P⋅<-4⋅l + x> ⎟           0   ⎜  P⋅l⋅<x>    3⋅P⋅<x>    5⋅P⋅<-l + x>    P⋅<-2⋅l + x> ⎟    0   ⎜  P⋅l⋅<x>    3⋅P⋅<x>    5⋅P⋅<-l + x>    P⋅<-2⋅l + x> ⎟           0
⎜────── - ───────────── + ───────────── - ─────────────⎟⋅<-2⋅l + x>    ⎜- ──────── + ──────── - ───────────── + ─────────────⎟⋅<x>    ⎜- ──────── + ──────── - ───────────── + ─────────────⎟⋅<-2⋅l + x>
⎝  48           4               2               4      ⎠               ⎝     4          8             8               4      ⎠        ⎝     4          8             8               4      ⎠
──────────────────────────────────────────────────────────────────── + ──────────────────────────────────────────────────────────── - ───────────────────────────────────────────────────────────────────
                                E⋅I                                                                E⋅I                                                                E⋅I
>>> b.deflection()
⎛         2        3               3               3⎞        ⎛         2        3               3               3⎞               ⎛     3        2                          3               3               3⎞
⎜  P⋅l⋅<x>    P⋅<x>    5⋅P⋅<-l + x>    P⋅<-2⋅l + x> ⎟    0   ⎜  P⋅l⋅<x>    P⋅<x>    5⋅P⋅<-l + x>    P⋅<-2⋅l + x> ⎟           0   ⎜7⋅P⋅l    5⋅P⋅l ⋅(-2⋅l + x)   P⋅<-2⋅l + x>    P⋅<-3⋅l + x>    P⋅<-4⋅l + x> ⎟           0
⎜- ──────── + ────── - ───────────── + ─────────────⎟⋅<x>    ⎜- ──────── + ────── - ───────────── + ─────────────⎟⋅<-2⋅l + x>    ⎜────── + ───────────────── - ───────────── + ───────────── - ─────────────⎟⋅<-2⋅l + x>
⎝     8         8            24              12     ⎠        ⎝     8         8            24              12     ⎠               ⎝  24             48                12              6               12     ⎠
────────────────────────────────────────────────────────── - ───────────────────────────────────────────────────────────────── + ────────────────────────────────────────────────────────────────────────────────────────
                            E⋅I                                                              E⋅I                                                                            E⋅I

例9#

有一根4米长的悬臂梁。前2米的惯性矩为 1.5*II 剩下的。从其自由端的顶部施加20 N量级的点荷载。

                                           ---> x
\\\\|                                      |
\\\\|                               20 N   v y
\\\\|________________                |
\\\\|                |_______________V
\\\\|      1.5*I      _______I_______|
\\\\|________________|
\\\\|                                :
\\\\|----------------|---------------|
           2.0 m            2.0 m
>>> 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
      -2         -1             -1
80⋅<x>   - 20⋅<x>   + 20⋅<x - 4>
>>> b.shear_force()
        -1         0             0
- 80⋅<x>   + 20⋅<x>  - 20⋅<x - 4>
>>> b.bending_moment()
        0         1             1
- 80⋅<x>  + 20⋅<x>  - 20⋅<x - 4>
>>> b.slope()
⎛          1         2             2             ⎞
⎜  - 80⋅<x>  + 10⋅<x>  - 10⋅<x - 4>    120       ⎟
⎜  ───────────────────────────────── + ───       ⎟                              ⎛        1         2             2⎞    0                     ⎛        1         2             2⎞        0
⎜                  I                    I    80.0⎟        0   0.666666666666667⋅⎝- 80⋅<x>  + 10⋅<x>  - 10⋅<x - 4> ⎠⋅<x>    0.666666666666667⋅⎝- 80⋅<x>  + 10⋅<x>  - 10⋅<x - 4> ⎠⋅<x - 2>
⎜- ─────────────────────────────────────── + ────⎟⋅<x - 2>  - ────────────────────────────────────────────────────────── + ──────────────────────────────────────────────────────────────
⎝                     E                      E⋅I ⎠                                       E⋅I                                                            E⋅I

示例10#

具有恒定抗弯刚度的组合梁 E*I ,是通过连接一根长度为 2*l 在另一根长梁的右边 l . 整个梁的两端都是固定的。巨大的点荷载 P 也从顶部应用,距离为 2*l 从起点开始。

                                      ---> x
                                      |
\\\\|                         P       v y |\\\\
\\\\|                         |           |\\\\
\\\\|                         V           |\\\\
\\\\|____________ ________________________|\\\\
\\\\|____________O________________________|\\\\
\\\\|            :            :           |\\\\
\\\\|            :            :           |\\\\
\\\\|------------|------------|-----------|\\\\
         l            l            l
>>> from sympy.physics.continuum_mechanics.beam import Beam
>>> from sympy import symbols
>>> E, I = symbols('E, I')
>>> l = symbols('l', positive=True)
>>> b1 = Beam(l ,E,I)
>>> b2 = Beam(2*l ,E,I)
>>> b = b1.join(b2,"hinge")
>>> M1, A1, M2, A2, P = symbols('M1 A1 M2 A2 P')
>>> b.apply_load(A1, 0, -1)
>>> b.apply_load(M1, 0 ,-2)
>>> b.apply_load(P, 2*l, -1)
>>> b.apply_load(A2, 3*l, -1)
>>> b.apply_load(M2, 3*l, -2)
>>> b.bc_slope=[(0, 0), (3*l, 0)]
>>> b.bc_deflection=[(0, 0), (3*l, 0)]
>>> b.solve_for_reaction_loads(M1, A1, M2, A2)
>>> b.reaction_loads
⎧    -5⋅P       -13⋅P       5⋅P⋅l      -4⋅P⋅l ⎫
⎨A₁: ─────, A₂: ──────, M₁: ─────, M₂: ───────⎬
⎩      18         18          18          9   ⎭

>>> b.load
         -2                   -2          -1                                   -1
5⋅P⋅l⋅<x>     4⋅P⋅l⋅<-3⋅l + x>     5⋅P⋅<x>                 -1   13⋅P⋅<-3⋅l + x>
─────────── - ────────────────── - ───────── + P⋅<-2⋅l + x>   - ─────────────────
     18               9                18                               18

>>> b.shear_force()
           -1                   -1          0                                  0
  5⋅P⋅l⋅<x>     4⋅P⋅l⋅<-3⋅l + x>     5⋅P⋅<x>                0   13⋅P⋅<-3⋅l + x>
- ─────────── + ────────────────── + ──────── - P⋅<-2⋅l + x>  + ────────────────
       18               9               18                             18

>>> b.bending_moment()
           0                   0          1                                  1
  5⋅P⋅l⋅<x>    4⋅P⋅l⋅<-3⋅l + x>    5⋅P⋅<x>                1   13⋅P⋅<-3⋅l + x>
- ────────── + ───────────────── + ──────── - P⋅<-2⋅l + x>  + ────────────────
      18               9              18                             18

>>> b.slope()
⎛         1          2               2⎞        ⎛         1          2               2⎞             ⎛   2                   1               2               2                  2⎞
⎜5⋅P⋅l⋅<x>    5⋅P⋅<x>    5⋅P⋅<-l + x> ⎟    0   ⎜5⋅P⋅l⋅<x>    5⋅P⋅<x>    5⋅P⋅<-l + x> ⎟         0   ⎜P⋅l    4⋅P⋅l⋅<-3⋅l + x>    5⋅P⋅<-l + x>    P⋅<-2⋅l + x>    13⋅P⋅<-3⋅l + x> ⎟         0
⎜────────── - ──────── + ─────────────⎟⋅<x>    ⎜────────── - ──────── + ─────────────⎟⋅<-l + x>    ⎜──── - ───────────────── - ───────────── + ───────────── - ────────────────⎟⋅<-l + x>
⎝    18          36            36     ⎠        ⎝    18          36            36     ⎠             ⎝ 18            9                 36              2                36       ⎠
──────────────────────────────────────────── - ───────────────────────────────────────────────── + ───────────────────────────────────────────────────────────────────────────────────────
                    E⋅I                                               E⋅I                                                                    E⋅I

>>> b.deflection()
⎛         2          3               3⎞        ⎛         2          3               3⎞             ⎛     3      2                            2               3               3                  3⎞
⎜5⋅P⋅l⋅<x>    5⋅P⋅<x>    5⋅P⋅<-l + x> ⎟    0   ⎜5⋅P⋅l⋅<x>    5⋅P⋅<x>    5⋅P⋅<-l + x> ⎟         0   ⎜5⋅P⋅l    P⋅l ⋅(-l + x)   2⋅P⋅l⋅<-3⋅l + x>    5⋅P⋅<-l + x>    P⋅<-2⋅l + x>    13⋅P⋅<-3⋅l + x> ⎟         0
⎜────────── - ──────── + ─────────────⎟⋅<x>    ⎜────────── - ──────── + ─────────────⎟⋅<-l + x>    ⎜────── + ───────────── - ───────────────── - ───────────── + ───────────── - ────────────────⎟⋅<-l + x>
⎝    36         108           108     ⎠        ⎝    36         108           108     ⎠             ⎝  54           18                9                108              6               108       ⎠
──────────────────────────────────────────── - ───────────────────────────────────────────────── + ─────────────────────────────────────────────────────────────────────────────────────────────────────────
                    E⋅I                                               E⋅I                                                                             E⋅I

例11#

由多项式定义的任何类型的荷载都可以应用于梁。这允许任意载荷分布的近似值。下面的示例显示了横跨梁表面的六个截断多项式荷载。

>>> n = 6
>>> b = Beam(10*n, E, I)
>>> for i in range(n):
...     b.apply_load(1 / (5**i), 10*i + 5, i, end=10*i + 10)
>>> plot(b.load, (x, 0, 10*n))  

(png, hires.png, pdf)

../../../_images/beam_problems-18.png