Python で集中荷重を受ける単純支持はりのたわみを計算

Python で集中荷重を受ける単純支持はりのせん断力,曲げモーメントおよびたわみを計算する。また計算結果より,せん断力図,曲げモーメント図,たわみ曲線をプロットする。

検討モデル

集中荷重(concentrated load)による単純支持はり(simply supported beam)のせん断力(shearing force),曲げモーメント(bending moment)およびたわみ(deflection)を検討するモデルを下図に示す。

単純支持はりの支点 A は回転はできるが移動できない回転支点(hinged support),支点 B は回転と共に一方に移動できる移動支点(movable support)である。

単純支持はりの支点 A を xy 座標の原点とし,原点より支点 B 方向を x の正,原点より鉛直下向きを y の正とする。また,単純支持はりの長さ(支点 A と 支点 B との間の距離)は l とする。

単純支持はりの x=a において作用する集中荷重 P を想定する。

図 集中荷重を受ける単純支持はり

Python コード

集中荷重を受ける単純支持はりのせん断力,曲げモーメントおよびたわみを計算する Python コードを紹介する。

ライブラリ読み込み

計算やプロットに用いるライブラリを読み込む。

import numpy as np
import matplotlib.pyplot as plt

定数の定義と反力の計算

計算に用いる定数の定義を行う。また容易に計算できる反力を計算しておく。

# 定数の定義
beam_length = 1000      # [mm] 単純支持はりの長さ
dx = beam_length / 1000 # [mm] 単純支持はりの x 軸の粒度
aa = 600                # [mm] 単純支持はりの左端から集中荷重が働く位置までの距離
bb = beam_length - aa   # [mm] 単純支持はりの右端から集中荷重が働く位置までの距離
concentrated_load = 50  # [N] 集中荷重
youngs_modulus = 200000 # [N/mm] 縦弾性係数
Iz = 3000               # [mm^4] 断面二次モーメント

# 反力の計算
RA = bb / beam_length * concentrated_load
RB = aa / beam_length * concentrated_load

せん断力、曲げモーメント、たわみを計算する関数

せん断力、曲げモーメント、たわみを計算する関数を定義する。

def calculate_values(xx, RA, aa, bb, beam_length, concentrated_load, youngs_modulus, Iz):
    Qx = np.zeros_like(xx)
    Mx = np.zeros_like(xx)
    yy = np.zeros_like(xx)
    for i in range(len(xx)):
        if xx[i] < aa:
            Qx[i] = RA
            Mx[i] = RA * xx[i]
            yy[i] = concentrated_load * bb / 6 / youngs_modulus / Iz / beam_length * (-xx[i]**3 + aa * (aa + 2 * bb) * xx[i])
        else:
            Qx[i] = - aa / beam_length * concentrated_load
            Mx[i] = aa / beam_length * (beam_length - xx[i]) * concentrated_load
            yy[i] = concentrated_load * aa / 6 / youngs_modulus / Iz / beam_length * (-(beam_length - xx[i]) ** 3 + bb * (2*aa + bb) * (beam_length - xx[i]))
    return Qx, Mx, yy

x 軸の定義,せん断力,曲げモーメント,たわみの計算

定義した関数を用いて,せん断力,曲げモーメント,たわみの計算を行う。

# x軸の定義
xx = np.arange(0, beam_length + dx, dx)
# せん断力、曲げモーメント、たわみの計算
Qx, Mx, yy = calculate_values(xx, RA, aa, bb, beam_length, concentrated_load, youngs_modulus, Iz)

プロット関数の定義

プロット関数の定義を行う。プロットしたグラフは png 形式で保存するようにしておく。

def plot_graph(x, y, xlabel, ylabel, title, filename):
    plt.figure()
    plt.plot(x, y, label=title)
    plt.grid(True)
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    plt.xlim([xmin, xmax])
    plt.legend()
    plt.savefig(filename, dpi=300)
    plt.show()

SFD,BMD,たわみ図の描画

プロット関数を用いて,せん断力図 (SFD),曲げモーメント図 (BMD),たわみ図を描画する。

# プロット範囲の定義
xmin, xmax = min(xx), max(xx)
# せん断力図 (SFD) の描画
plot_graph(xx, Qx, 'x [mm]', 'Shearing Force [N]', 'Shearing Force', "SFD.png")
# 曲げモーメント図 (BMD) の描画
plot_graph(xx, Mx, 'x [mm]', 'Bending Moment [Nmm]', 'Bending Moment', "BMD.png")
# たわみ図の描画
plot_graph(xx, yy, 'x [mm]', 'Deflection [mm]', 'Deflection', "deflection_curve.png")

描画した結果

せん断力図 (SFD),曲げモーメント図 (BMD),たわみ図を描画した結果を示す。

せん断力図 (SFD)

せん断力図 (SFD) を描画した結果を示す。

図 集中荷重を受ける単純支持はりのせん断力図 (SFD)

曲げモーメント図 (BMD)

曲げモーメント図 (BMD) を描画した結果を示す。

図 集中荷重を受ける単純支持はりの曲げモーメント図 (BMD)

たわみ図

たわみ図を描画した結果を示す。

図 集中荷重を受ける単純支持はりのたわみ曲線

参考文献

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です