🔩

東工大機械系院試をpythonで解いてみた[材料力学編]

2023/09/16に公開

はじめに

東工大の機械系の院試の問題をpythonを使って解いてみます。今回は令和1年度 材料力学 を解いていきます。過去問は以下のページにあります。
https://www.titech.ac.jp/admissions/prospective-students/admissions/past-exam-papers

問題


問1

pythonを使う必要がないので普通に解きます。
(1)

\alpha L \Delta T

\alpha L \Delta T (2)
\lambda=\varepsilon L=\frac{\sigma}{E}L=\frac{RL}{AE}

よって

\frac{4RL}{\pi d^2E}

\frac{RL}{\pi d^2E} (3)
(\alpha L \Delta T+\alpha L \Delta T)-(\frac{4RL}{\pi d^2E}+\frac{RL}{\pi d^2E})=0

よって

R=\frac{2}{5}\alpha\Delta T\pi d^2E (4)
\lambda_AB=\alpha L \Delta T-\frac{4RL}{\pi d^2E}=-\frac{3}{5}\alpha L \Delta T

よって
⑥左

\frac{3}{5}\alpha L \Delta T

問2

(1)
断面二次モーメントIは

I=\int_{A}^{}y^2dA=\frac{bh^3}{12}

よって

\frac{bh^3}{12} (2)

力のつり合い、モーメントのつり合いを考えます。
せん断力S_x,曲げモーメントM_xとすると

S_x+\int_{0}^{x}w(x)dx=0
M_x-\int_{0}^{x}w(x)xdx-S_x x=0
from sympy import symbols, integrate, solve

# シンボルの定義
x, w0, L = symbols('x w0 L')
Sx, Mx = symbols('Sx Mx')

# w(x)の定義
w_x = w0 * x / L

# 式の準備
integral_1 = integrate(w_x, (x, 0, x))

# せん断力を解く
Sx_solution = solve(Sx + integral_1, Sx)[0]
print(Sx_solution)

# 式の準備
integral_2 = integrate(w_x * x, (x, 0, x))

# 曲げモーメントを解く
Mx_solution = solve(Mx - integral_2 - Sx_solution * x, Mx)[0]
print(Mx_solution)

よって

-\frac{w_0 x^2}{2L}

-\frac{w_0 x^3}{6L} (3)

曲げ応力\sigma

\sigma=\frac{M_x}{I}y

曲げ応力が最大になるのはx=L

# シンボルの定義
I, y, b, h = symbols('I y b h')

# 曲げ応力の定義
sigma=Mx*y/I

# 値を代入する
sigma_substituted = sigma.subs({I: b*h**3/12, y: -h/2, Mx: Mx_solution})
print(sigma_substituted)

# x=Lを代入する
sigma_max = sigma_substituted.subs(x, L)
print(sigma_max)

よって

\frac{w_0 x^3}{bh^2L}

\frac{w_0 L^2}{bh^2} (4)

たわみの基礎式より

\frac{dy^2}{dx^2}=-\frac{M_x}{EI}=\frac{w_0 x^3}{6EIL}

初期条件はx=Lでy=0,y'=0として、この二階線形非同次常微分方程式を解きます。
たわみが最大になるのはx=0のときです。

from sympy import Eq

# 変数を定義する
E, C1, C2  = symbols('E C1 C2')

# 方程式を定義する
eq = w0 * x**3 / (6 * E * I * L)

# xに関して方程式を積分する
dy_dx = integrate(eq, x) + C1

# 与えられた初期条件
condition1 = dy_dx.subs(x, L)

# C1の値を解く
C1_value = solve(Eq(condition1, 0), C1)[0]

# dy_dxの方程式を積分してyを得る
y = integrate(dy_dx.subs(C1, C1_value), x) + C2

# 与えられた初期条件
condition2 = y.subs(x, L)

# C2の値を解く
C2_value = solve(Eq(condition2, 0), C2)[0]

# yの方程式にIの値を代入する
y_substituted = y.subs(I, b*h**3/12)

# C2_valueの方程式にIの値を代入する
C2_substituted = C2_value.subs(I, b*h**3/12)

# y_substitutedにC2_substitutedの値を代入する
y_final = y_substituted.subs(C2, C2_substituted)
print(y_final)

# y_finalの方程式にx=0を代入する
y_at_x0 = y_final.subs(x, 0)
print(y_at_x0)

よって

\frac{w_0}{10ELbh^3}(x^5-5L^4 x+4L^5)

\frac{2w_0 L^4}{5Ebh^3} (5)

集中荷重だけがかかる時のAのたわみを算出し、(4)の答えと合わせて、重ね合わせの原理より答えを出します。

# 変数を定義する
P = symbols('P')

# 方程式を定義する
eq_p = -P*x/(E*I)

# xに関して方程式を積分する
dy_dx = integrate(eq_p, x) + C1

# 与えられた初期条件
condition1 = dy_dx.subs(x, L)

# C1の値を解く
C1_value = solve(Eq(condition1, 0), C1)[0]

# dy_dxの方程式を積分してyを得る
y = integrate(dy_dx.subs(C1, C1_value), x) + C2

# 与えられた初期条件
condition2 = y.subs(x, L)

# C2の値を解く
C2_value = solve(Eq(condition2, 0), C2)[0]

# yの方程式にIの値を代入する
y_substituted = y.subs(I, b*h**3/12)

# C2_valueの方程式にIの値を代入する
C2_substituted = C2_value.subs(I, b*h**3/12)

# y_substitutedにC2_substitutedの値を代入する
y_final = y_substituted.subs(C2, C2_substituted)

# y_finalの方程式にx=0を代入する
y_at_x0_p = y_final.subs(x, 0)

# 重ね合わせの原理
P_value = solve(y_at_x0+y_at_x0_p, P)[0]
print(P_value)

よって

\frac{w_0 L}{10}

問3,4

この問題もpythonを使う場面がないので普通に解きます。
⑯⑰

(\sigma-(\frac{\sigma_x+\sigma_y}{2}))^2+\tau^2=(\frac{\sigma_x-\sigma_y}{2})^2+\tau_{xy}^2

⑱モールの応力円 ⑲主応力 ⑳単純せん断 ㉑\tau_0 ㉒(ク) ㉓(キ)
㉔鋳鉄 ㉕低炭素鋼 ㉖アルミニウム合金 ㉗脆性 ㉘降伏 ㉙残留ひずみ 
㉚塑性 ㉛耐力 ㉜引張強さ ㉝くびれ

まとめ

流体力学や数学の問題を解いたときほどpythonで解く意味はなかったですね。
https://zenn.dev/porphyrio/articles/c43ab6b9879af1
https://zenn.dev/porphyrio/articles/93ef80b71703d3

Discussion