0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

材料力学「三モーメント法 いろいろ」sympyで。

Last updated at Posted at 2025-06-30

・def reorder_expression_str(expr, var_order): があります。
・作図未。イメージは、...
・呼び方いろいろ
 連続はり(continous beam)
 クライペイロン(Clapeyron)の3モーメントの式(equation of three moments)
 3連モーメント定理(クライペイロンの定理)
 三連モーメントの定理
 3モーメントの方法
 Theorem_of_three_moments

sympyで

プログラムでは、ありません。

・ver0.1

# ver0.1
from sympy import *
var('Ekm1,Ek,Ekp1')
var('Ikm1,Ik,Ikp1')
var('lkm1,lk,lkp1')
var('θPBkm1,θPBk,θPBk')                         
var('θPAkm1,θPAk,θPAk')                         
var('θBkm1 ,θBk ')                         
var('θMBkm1,θMBk')                         
var('MAkm1,MAk,MAkp1')
var('MBkm1,MBk,MBkp1')
var('E,I,Mk,Mkm1,Mk,Mkp1')
def reorder_expression_str(expr, var_order):
    from sympy import Add, factor, sstr
    terms_in_order = []
    remaining_terms = list(expr.expand().args)
    for var in var_order:
        matching_terms = [t for t in remaining_terms if t.has(var)]
        if matching_terms:
            subtotal = Add(*matching_terms)
            subtotal = factor(subtotal)
            terms_in_order.append(sstr(subtotal))
            for t in matching_terms:
                remaining_terms.remove(t)
    # 残りも追加
    for t in remaining_terms:
        terms_in_order.append(sstr(t))
    return " + ".join(terms_in_order)
θMAk= (2*MAk+  MBk)*lk/(6*Ek*Ik)
θMBk=-(  MAk+2*MBk)*lk/(6*Ek*Ik)
θAk =θMAk+θPAk                                                 #(6.35)
θBk =θMBk+θPBk                                                 #  〃
rep636={MBkm1:MAk,MBk:MAkp1,MAkm1:Mkm1,MAk:Mk,MAkp1:Mkp1}      #;print(rep636)
rep637={θBkm1:θAk}                                             #(6.37)
equ638=Eq(θMBkm1+θPBkm1,θMAk+θPAk)                             #(6.38)
equ639=Eq(-(  MAkm1+2*MBkm1)*lkm1/(6*Ekm1*Ikm1)+θPBkm1, \
           (2*MAk  +  MBk  )*lk  /(6*Ek  *Ik  )+θPAk)          #;print(equ639)
equ640=equ639.subs(rep636).subs(rep637)                        #;print(equ640)
equ641=Eq((equ640.lhs-equ640.rhs).simplify(),0)                #;print(equ641)
equ641=Eq(equ641.lhs-(θPBkm1-θPAk),-(θPBkm1-θPAk))             #;print(equ641)
equ641=Eq(-equ641.lhs.simplify(),-equ641.rhs.simplify())       #;print(equ641)
rep={Ek:E,Ik:I,Ekm1:E,Ikm1:I}
equ642=equ641.subs(rep).subs(rep636)                           #;print(equ642)
equ642=Eq(equ642.lhs*6*E*I,equ642.rhs*6*E*I)                   #;print(equ642)
equ642=Eq(equ642.lhs.expand(),equ642.rhs.simplify())           #;print(equ642)
print("#",reorder_expression_str(equ642.lhs, [Mkm1, Mk, Mkp1]),"=",equ642.rhs)
# Mkm1*lkm1 + 2*Mk*(lk + lkm1) + Mkp1*lk = 6*E*I*(-θPAk + θPBkm1)

等分布荷重を受ける4点で支持されたはり

・ver0.1

# ver0.1
from sympy import *
var('q,l,EI,M2,M3')
var('M1,M4')
var('RPAk,RPBkm1,M_1,M_2,M_3,M_4,lkm1,lk')
RA=RB   =Rational(1, 2)   *q*l      #;print("#",RA1)
θA      =Rational(1,24)/EI*q*l**3   #;print("#",RA1)
θB      =-θA
sol_M2M3=solve([Eq(2*M2*(l+l)+  M3* l   ,-Rational(1,2)*q*l**3),
                Eq(  M2* l   +2*M3*(l+l),-Rational(1,2)*q*l**3)],
              [M2,M3]
              )  # ;print(sol_M2M3)
M1=0;M2=sol_M2M3[M2];M3=sol_M2M3[M3];M4=0
equ_643=RPAk+RPBkm1+(M_1-M_2)/lkm1-(M_3-M_4)/lk
R1     =RA-(-1)*M2/l                                              ;print("#",R1)
R2     =equ_643.subs({RPAk:RA,RPBkm1:RB, \
                      M_1:M1,M_2:M2,M_3:M2,M_4:M3, lkm1:l,lk:l})  ;print("#",R2)
R3     =equ_643.subs({RPAk:RA,RPBkm1:RB, \
                      M_1:M2,M_2:M2,M_3:M3,M_4:0 , lkm1:l,lk:l})  ;print("#",R3)
R4     =RB+M3/l                                                   ;print("#",R4)
# 2*l*q/5
# 11*l*q/10
# 11*l*q/10
# 2*l*q/5

いつもの? sympyの実行環境と 参考のおすすめです。

(テンプレート)

いつもと違うおすすめです。

Qiita内

・作業中:いろいろシリーズ(sympy)

文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?