ひずみエネルギとそれを使った材料力学 基本例題8.31 P287 「材料力学演習(20221021)」をsympyでやってみた。


**パイソニスタの方へ**
ver1.0について、def のネストをするつもりがありませんでした。どのようにするものですか?

https://qiita.com/mrrclb48z/items/d1db43a81dc9d10fd874

・sympyのTrussで作図しました。縦横比が1:1でありません。(2025-06-10)
~~・作図はありません。(⊿⊿形)でイメージして下さい。~~ 

# オリジナル
基本例題8.30 P287
~~http://zairikiweb.starfree.jp/zai_enshuh/zai_enshuh_ver.3.3.pdf#page=292~~

「材料力学演習(20221021)一括(ver.3.3)」を勉強したい。＞sympy
https://qiita.com/mrrclb48z/items/c3274daf5f7a99cfe027#%E4%BD%9C%E6%A5%AD%E4%B8%AD%E7%A7%81%E3%81%AE%E8%A7%A3%E7%AD%94sympy

# sympyで
#### ver0.1
```python
# ver0.1
from sympy import *
var('P,l,AE')
var('NAB,NAC,NBD,NBC,NCD')
var('nAB,nAC,nBD,nBC,nCD')
rep  ={NAB:-P,NAC:sqrt(2)*P,NBD:-sqrt(2)*P,NBC:-P,NCD:P}
repDV={nAB:-1,nAC:sqrt(2)  ,nBD:-sqrt(2)  ,nBC:-1,nCD:1}
repDH={nAB: 0,nAC:sqrt(2)  ,nBD:0         ,nBC:-1,nCD:1}
print("#",(1/AE*(NAB*nAB*l+NAC*nAC*sqrt(2)*l+NBC*nBC*l+NBD*nBD*sqrt(2)*l+NCD*nCD*l).subs(rep).subs(repDV).simplify()))
print("#",(1/AE*(NAB*nAB*l+NAC*nAC*sqrt(2)*l+NBC*nBC*l+NBD*nBD*sqrt(2)*l+NCD*nCD*l).subs(rep).subs(repDH).simplify()))
# P*l*(3 + 4*sqrt(2))/AE
# 2*P*l*(1 + sqrt(2))/AE
```

# sympyのTrussで
#### ver1.0
・Trussの [「property member_lengths」](https://docs.sympy.org/latest/modules/physics/continuum_mechanics/truss.html#sympy.physics.continuum_mechanics.truss.Truss.member_lengths)がありました。
```python
# ver1.0
from sympy.physics.continuum_mechanics.truss import Truss
from sympy import *
var('P,Q,l,AE',positive=True)
def myTruss(l):
    def myAdd_member(*args):
        def make_triples(s):
            return (s,s[0],s[1])
        for s in args:
            t.add_member(make_triples(s))      
    t = Truss()
    t.add_node     (          ('C',l*1,l),('D',l*2,l)) 
    t.add_node     (('A',0,0),('B',l*1,0 )) 
    myAdd_member   ('AB','AC','BD','BC','CD')  
    t.apply_support(('A' ,'pinned'),('B','roller'))
    t.apply_load   (('D',P,270))
    t.solve()
    return t
t=myTruss(l)
# --------------------------------------------------------------------------------------------
# 垂直方向変位 δDV 
print("#",sum({k:1/(2*AE)*v1**2*v2  \
               for (k,v1),(_,v2) in zip(t.internal_forces.items(),t.member_lengths.items())} \
               .values()).diff(P).simplify())
# 水平方向変位 δDH
t.apply_load(('D',Q,0))
t.solve()
print("#",sum({k:1/(2*AE)*v1**2*v2  \
               for (k,v1),(_,v2) in zip(t.internal_forces.items(),t.member_lengths.items())} \
               .values()).diff(Q).simplify().subs({Q:0}))
# 作図のため,l=1
myTruss(1).draw().show()
# --------------------------------------------------------------------------------------------
# P*l*(3 + 4*sqrt(2))/AE
# 2*P*l*(1 + sqrt(2))/AE
```
・縦横比は1:1でありません。
![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/8335e9f6-9ee4-4474-8886-38580c5503c4.png)

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)
# いつもと違うおすすめです。

#### wikipedia 

https://qiita.com/mrrclb48z/items/53640cff620d13d4b50c#%E3%81%84%E3%81%A4%E3%82%82%E3%81%A8%E9%81%95%E3%81%86%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%A7%E3%81%99

#### Qiita内

https://qiita.com/mrrclb48z/items/ef71c031744375980918

https://qiita.com/mrrclb48z/items/e2b3306744123ab29ce2

類題

https://qiita.com/mrrclb48z/items/3fad9bdd55c14c135a90