はりの計算式を解く(5)

はりの計算式は
  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 とすれば普通の梁です。

 

今回は 数式をコマンドプロンプトに表示するやり方を紹介します。

Mery で以下のスクリプトを書いて ファイル名 "000-2.bat" で保存して実行すれば数式が表示されます。
: 等分布荷重 単純支持
@echo off
path C:\maxima-5.46.0\bin;%path%
ruby -x %~f0 5 -10 0.15 0.3 6.5 6.5/15 1.2
pause
goto:eof

#!ruby
def pt_qm_tp_0(l, w, b, h, e, g, κ)
  f = open "| maxima --very-quiet", "w"
  f.print <<~Maxima
    p: -w$                                    /* (M1) */
    Q: C1 + integrate(p, x)$        /* (M2) */
    M: C2 + integrate(Q, x)$       /* (M3) */
    r: -M$                        /* (M4) */
    G: κ * EI / GA * Q$ /* (M4-1) */
    T: C3 + integrate(r, x)$         /* (M5) */
    V: C4 + integrate(T + G, x)$ /* (M6) */
    s: solve([ev(M, x = 0) = 0, ev(V, x = 0) = 0, ev(M, x = L) = 0, ev(V, x = L) = 0]
    , [C1, C2, C3, C4])$ /*(M7)*/
    [Q, M, T, V]: subst(s, [Q, M, T/EI, V/EI]);      /* (M8) */
    print("q =", string(factor(ratsubst(__g__, κ*EI/GA/L^2, Q))))$ /* (M8-1) */
    print("m =", string(factor(ratsubst(__g__, κ*EI/GA/L^2, M))))$ /* (M8-2) */
    print("t =", string(factor(ratsubst(__g__, κ*EI/GA/L^2, T))))$ /* (M8-3) */
    print("v =", string(factor(ratsubst(__g__, κ*EI/GA/L^2, V))))$ /* (M8-4) */
    [L, w, B, D, e, g, κ]: [#{l}, #{w}, #{b}, #{h}, #{e}, #{g}, #{κ}]$      /* (M9) */
    [EI, GA]: [e*B*D^3/12, g*B*D] * 10^6$      /* (M10) */
    plot2d([Q, M, T*1000, V*1000, p], [x, 0, L])$ /* (M11) */
    ?sleep(5)$ /* (M12) 5秒表示 */
    quit()$ /* (M13) 終了 */
  Maxima
  f.close
end
l, w, b, h, e, g, κ = ARGV.map { |x| eval(x) } # m, kN/m, m, m, kN/mm2, kN/mm2
pt_qm_tp_0(l, w, b, h, e, g, κ)
__END__

(M8)~(M8-4)で 数式がコマンドプロンプト

と表示されます。

 

maxima で求めた数式は テキストファイルで数値化して ruby とやり取りできるので この数式を ruby で直接利用するのはやめます。おそらく泥沼です。
コマンドプロンプトに表示された数式をコピーしてエディタに貼り付ければなんとかなります。

せん断変形を考慮したはりの計算式は maxima を利用すれば簡単に解けることがわかりました。

 

次回は maxima により曲げとせん断の成分を表示するやり方を紹介します。

 

2023/11/06 に計算式に(4-1)式を追加しました。