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?

(積分)例題1:集中荷重を受ける片持ち梁 <【② 構造力学の「構造」例題】様を参考にsympyで実行した。

Last updated at Posted at 2025-01-15

パイソニスタの方へ
 アドバイスをいただけると幸いです。
①式「〜*P/〜」→ 文字列「P*〜/〜」 書き換える方法について
 ver0.2 ChatGPT先生に聞いて、無次元変数x/L と Polyで対応しました。 (履歴省略)
 ver0.1 自作関数 def myKakeruPw(v,Pw): で対応しました。
 無次元化があればokかと思いましたが、
 「5*L*P」、「−3*L*P」 に対応できていません。→「5*P*L」、「−3*P*L」
②無次元化をx/Lで、する方法。
③plotの目盛りを記号(PL,L)で表示する方法。
 y軸の数字だけでも非表示できると助かります。

???記号、符号の読替え表が必要かも。
v → w,w → q,L → l,SFDのグラフの表示,BMDのグラフの表示

オリジナル

Youtube 仮想仕事の原理の教育に関する研究会 様  
例題1 片持ち梁1 集中荷重 (2:50〜6:30)
https://youtu.be/NMP0Q78Wl9Q?t=170
<目次(18:50)
https://youtu.be/NMP0Q78Wl9Q?t=1130
<フル【② 構造力学の「構造」例題】 (0:00〜19:21)
https://youtu.be/NMP0Q78Wl9Q

sympyのweb上での実行方法

SymPy Live Shellで。
FreeCADのマクロは、以下で実行できません。本ページで使っていません。
https://qiita.com/mrrclb48z/items/00dd08b0317069be9342#web%E4%B8%8A%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%96%B9%E6%B3%95sympy-live-shell%E3%81%A7

sympyで

・ver0.2
https://docs.sympy.org/latest/modules/polys/reference.html#sympy.polys.polytools.Poly.all_coeffs

# ver0.2
# (積分)例題1:集中荷重を受ける片持ち梁 <【② 構造力学の「構造」例題】
from sympy import *
var('x,C1,C2,C3,C4,P,L,EI,xi,x,y')
def myCom_str(first):
    ret= str(Poly(first,L).LC())+'*L**' + str( Poly(first,L).degree() )          #;print(ret)
    return ret
def myMujigennka(v):
    if 'x' in str(v)==True:
       ret=myMujigennka_ari (v)
    else:
       ret=myMujigennka_nasi(v)
    return ret
def myMujigennka_ari(v):
    v_numer =((numer(v).subs({x:L*xi}).expand()))                                #;print(v_numer)
    com     =Poly(v_numer,xi).LC()                                               #;print(com)
    if str(com)[0]=='-':
       com=com*-1                                                                #;print(com)    
    poly=Poly((v_numer/com).expand()).all_coeffs() [::-1]                        #;print(poly) 
    v_str=""
    for i in range(len(poly)):
        if poly[i]!=0:
           if poly[i]==0:
              pass
           elif poly[i]==1:
              v_str=v_str+"+xi**" +str(i)
           else:
              v_str=v_str+"+" + str(poly[i]) + "*xi**" +str(i)           
    v_str=v_str[1:].replace('+-','-').replace('xi','(x/L)')
    v_str=(myCom_str(com)+"/(" + str(denom(v)) +")*("+v_str+")").replace(' ','')   # ;print(v_str)                               
    return v_str
def myMujigennka_nasi(v):
    v_str=(myCom_str(numer(v))+"/(" + str(denom(v))+")").replace(' ','')   # ;print(v_str)                               
    return v_str
EIv4=0                                     #;print(EIv4)
EIv3=integrate(EIv4,x)+     C1             #;print(EIv3)
EIv2=integrate(EIv3,x)+L   *C2             #;print(EIv2)
EIv1=integrate(EIv2,x)+L**2*C3             #;print(EIv1)
EIv =integrate(EIv1,x)+L**3*C4             #;print(EIv )
sol =solve([Eq(1/EI*EIv .subs({x:0}),0),   # 幾何的境界条件
            Eq(1/EI*EIv1.subs({x:0}),0),
            Eq(    -EIv3.subs({x:0}),P),   # 力学的境界条件
            Eq(    -EIv2.subs({x:L}),0),           
           ],[C1,C2,C3,C4])                # ;print(sol)
v   =(1/EI*(EIv.subs({C1:sol[C1],C2:sol[C2],C3:sol[C3],C4:sol[C4]}))).factor()  #;print(w)
print("#",myMujigennka_ari(     v                ))
print("#",myMujigennka((     v   .subs({x:L}))))
print("#",myMujigennka((diff(v,x).subs({x:L}))))
# P*L**3/(6*EI)*(3*(x/L)**2-1*(x/L)**3)
# P*L**3/(3*EI)
# P*L**2/(2*EI)
#
# rep={P:1,L:1,EI:1}
# plot (diff(v,x,3).subs(rep),(x,0,1),ylim=(-1.5,1.5))  # (-)
# plot (diff(v,x,2).subs(rep),(x,0,1))                  # (-)上に凸

・ver0.1 旧いです。

# ver0.1 旧いです。
# (積分)例題1:集中荷重を受ける片持ち梁 <【② 構造力学の「構造」例題】
from sympy import *
var('x,C1,C2,C3,C4,P,L,EI')
def myMujigennka(v,com):
    return ( str(com)+"*("
            +str((v/com).expand())                \
                 .replace("x**2/L**2","(x/L)**2") \
                 .replace("x**3/L**3","(x/L)**3") \
                 .replace("x**4/L**4","(x/L)**4") 
            +")").replace(" ","")
def myKakeruPw(v,Pw):
    return Pw+"*"+str(v).replace("*"+Pw,"")
EIv4=0                                     #;print(EIv4)
EIv3=integrate(EIv4,x)+     C1             #;print(EIv3)
EIv2=integrate(EIv3,x)+L   *C2             #;print(EIv2)
EIv1=integrate(EIv2,x)+L**2*C3             #;print(EIv1)
EIv =integrate(EIv1,x)+L**3*C4             #;print(EIv )
sol =solve([Eq(1/EI*EIv .subs({x:0}),0),   # 幾何的境界条件
            Eq(1/EI*EIv1.subs({x:0}),0),
            Eq(    -EIv3.subs({x:0}),P),   # 力学的境界条件
            Eq(    -EIv2.subs({x:L}),0),           
           ],[C1,C2,C3,C4])                # ;print(sol)
v   =(1/EI*(EIv.subs({C1:sol[C1],C2:sol[C2],C3:sol[C3],C4:sol[C4]}))).factor()  #;print(w)
print("#",myKakeruPw(myMujigennka(v,P*L**3/(6*EI)),"P"))                   
print("#",myKakeruPw(     v   .subs({x:L})        ,"P"))
print("#",myKakeruPw(diff(v,x).subs({x:L})        ,"P"))
# P*L**3/(6*EI)*(3*(x/L)**2-(x/L)**3)
# P*L**3/(3*EI)
# P*L**2/(2*EI)
#
rep={P:1,L:1,EI:1}
plot (diff(v,x,3).subs(rep),(x,0,1),ylim=(-1.5,1.5))  # (-)
plot (diff(v,x,2).subs(rep),(x,0,1))                  # (-)上に凸

plotで作図

・値は、適当に1.0です。yscaleは、ylim=(,)で対応です。

SFD (+) 例題1:集中荷重を受ける片持ち梁
111.png
BMD (-)上に凸 例題1:集中荷重を受ける片持ち梁
222.png

sympyで(Beamで)

勉強中
https://docs.sympy.org/latest/modules/physics/continuum_mechanics/beam.html
https://docs.sympy.org/latest/modules/physics/continuum_mechanics/beam_problems.html
https://qiita.com/tags/beam

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

(テンプレート)

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

Qiita内

(4次式) 積分→4次式に変換をあきらめました。私は、ちょっと図々しかったです。
https://qiita.com/mrrclb48z/items/d737089fc21b71c532d8

(エネルギー法) 荷重点1点のたわみ、たわみ角の計算。Castigliano's second theorem で。
https://qiita.com/mrrclb48z/items/a6f5ecb20b793b563bdc#%E3%81%AF%E3%82%8A%E3%81%AE%E5%9F%BA%E6%9C%AC%E5%95%8F%E9%A1%8C2

参考文献

>一部に等分布荷重を受ける単純支持はり
>JSME p89
 
>片持ちばり 1)
>構造力学公式集 表5.1 片持ちばりの公式 p128

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?