はりの計算式を解くやり方をいろいろと紹介しています。
本稿の弾性曲線式は
V''''(x) = p(x), x | 0 => L (technical theory of beam, Euler–Bernoulli beam theory)
V''''(x) = p(x) - κ * EI / GA * p''(x), x | 0 => L (Timoshenko beam theory)
と改めます。上は普通の梁で、下はせん断変形を考慮した梁の式です。
はりの計算式は
V''''(x) = p(x) = -w (1)
V''' (x) = Q(x) = C1 + ∫ p(x) dx (2)
V'' (x) = M(x) = C2 + ∫ Q(x) dx (3)
r(x) = -M(x) (4)
G(x) = κ * EI / GA * Q(x) (4-1)
V' (x) = T(x) = C3 + ∫ r(x) dx (5)
V (x) = V(x) = C4 + ∫ T(x) + G(x) dx (6)
ただし
κ せん断変形の形状係数
EI 曲げ剛性(一定)
GA せん断剛性(一定)
x 位置
L スパン長
p(x) 分布荷重
w 等分布荷重
Q(x) せん断力
M(x) 曲げモーメント
r(x) 曲率(δ''=φ=r(x)/EI)
G(x) せん断角(γ=G(x)/EI、鉛直方向のせん断歪は全断面で一定とし、材軸方向は0とする)
T(x) たわみ角(θ=T(x)/EI)
V(x) たわみ(δ=V(x)/EI)
C1 積分定数(Q(x=0))
C2 積分定数(M(x=0))
C3 積分定数(T(x=0))
C4 積分定数(V(x=0))
とします。G(x) = 0 とすれば普通の梁です。
今回は 部分載荷(3スパン)について考えます。
Mery で以下のスクリプトを書いて ファイル名 "000-6.bat" で保存して実行すれば部分載荷(3スパン)が処理されます。
単純支持、1スパンを1区間としています。
: 部分載荷(3スパン)
@echo off
path C:\maxima-5.47.0\bin;%path%
ruby -x %~f0 5 5 5 0 -10 0 0.15 0.3 6.5 6.5/15 1.2
pause
goto:eof
#!ruby
def pt_qm_tp_43(l1, l2, l3, w1, w2, w3, t, h, e, g, κ)
f = open "| maxima --very-quiet", "w"
f.print <<~Maxima
[p1, p2, p3]: -[w1, w2, w3]$ /*(M1)*/
[Q1, Q2, Q3]: [C1 + integrate(p1, x), C5 + integrate(p2, x), C9 + integrate(p3, x)]$ /*(M2)*/
[M1, M2, M3]: [C2 + integrate(Q1, x), C6 + integrate(Q2, x), CA + integrate(Q3, x)]$ /*(M3)*/
[r1, r2, r3]: -[M1, M2, M3]$ /*(M4)*/
[G1, G2, G3]: κ * EI / GA * [Q1, Q2, Q3]$ /*(M4-1)*/
[T1, T2, T3]: [C3 + integrate(r1, x), C7 + integrate(r2, x), CB + integrate(r3, x)]$ /*(M5)*/
[V1, V2, V3]: [C4 + integrate(T1 + G1, x), C8 + integrate(T2 + G2, x), CC + integrate(T3 + G3, x)]$ /*(M6)*/
s: solve([
ev(M1, x = 0) = 0, ev(V1, x = 0) = 0,
ev(M1, x = L1) = ev(M2, x = 0),
ev(T1, x = L1) = ev(T2, x = 0),
ev(V1, x = L1) = 0, ev(V2, x = 0) = 0,
ev(V2, x = L2) = 0, ev(V3, x = 0) = 0,
ev(M2, x = L2) = ev(M3, x = 0),
ev(T2, x = L2) = ev(T3, x = 0),
ev(M3, x = L3) = 0, ev(V3, x = L3) = 0]
, [C1, C2, C3, C4, C5, C6, C7, C8, C9, CA, CB, CC])$ /*(M7)*/
[Q1, M1, T1, V1, G1]: ev([Q1, M1, T1/EI, V1/EI, G1/EI], s)$ /*(M8)*/
[Q2, M2, T2, V2, G2]: ev([Q2, M2, T2/EI, V2/EI, G2/EI], s)$
[Q3, M3, T3, V3, G3]: ev([Q3, M3, T3/EI, V3/EI, G3/EI], s)$
p: if x < L1 then p1 elseif L1 <= x and x < L1 + L2 then p2 else p3$ /*(M8-1)*/
Q: if x < L1 then Q1 elseif L1 <= x and x < L1 + L2 then ev(Q2, x = x - L1) else ev(Q3, x = x - L1 - L2)$
M: if x < L1 then M1 elseif L1 <= x and x < L1 + L2 then ev(M2, x = x - L1) else ev(M3, x = x - L1 - L2)$
T: 1000 * if x < L1 then T1 elseif L1 <= x and x < L1 + L2 then ev(T2, x = x - L1) else ev(T3, x = x - L1 - L2)$
V: 1000 * if x < L1 then V1 elseif L1 <= x and x < L1 + L2 then ev(V2, x = x - L1) else ev(V3, x = x - L1 - L2)$
G: 1000 * if x < L1 then G1 elseif L1 <= x and x < L1 + L2 then ev(G2, x = x - L1) else ev(G3, x = x - L1 - L2)$
[L1, L2, L3, w1, w2, w3, t, D, e, g, κ]: [#{l1}, #{l2}, #{l3}, #{w1}, #{w2}, #{w3}, #{t}, #{h}, #{e}, #{g}, #{κ}]$ /* (M9) */
[EI, GA]: [e*t*D^3/12, g*t*D] * 10^6$ /*(M10)*/
plot2d([Q, M, T, V, p], [x, 0, L1+L2+L3], [legend, "Q", "M", "T", "V", "p"])$ /*(M11)*/
?sleep(5)$ /*(M12) 5秒表示*/
pv: makelist([x, ev(Q), ev(M), ev(T), ev(V)], x, 0, L1+L2+L3, dx:0.5)$ /*(M12-1)*/
write_data(float(pv), "C:/jww/ztemp_pv.txt")$ /*(M12-2)*/
quit()$ /*(M13) 終了*/
Maxima
f.close
end
l1, l2, l3, w1, w2, w3, t, h, e, g, κ = ARGV.map { |x| eval(x) } # (R14) m, m, m, kN/m, kN/m, kN/m, m, m, kN/mm2, kN/mm2
pt_qm_tp_43(l1, l2, l3, w1, w2, w3, t, h, e, g, κ) # (R15)
p [" m kN kNm x1000 rad mm "] # (R16)
File.foreach("C:/jww/ztemp_pv.txt") do |line|
p [" x Q M T V =", *line.split.map { |x| x.to_f.round(3) }] # (R17)
end
__END__
(M11)で
と表示されます。
(M12-1)と(M12-2)で 0.5m ではりを分割し、分割点の位置の応力と変位をテキストファイルに保存します。
その内容が (R17) で
と表示されます。
参考までに、その数値を利用すれば
のように ruby/tk で表示することができます。
次回は バネ支点について取り上げます。