材料力学「2部材トラス,3部材,複雑なトラス いろいろ(その2/3)」sympyのTrussで。

:::note info
[(その1/3)](https://qiita.com/mrrclb48z/items/b49395a9a0b358c9d604)
(その2/3) 本ページ
[(その3/3)](https://qiita.com/mrrclb48z/items/da4e609e2b5e9713ffee)
:::

# 2部材トラス,3部材トラスをsympyで
・(1)から移動してきました。
```python
# (V形) 2部材トラス 村上敬宣著 森北出版　P10[例題2.3(1)]
from sympy import *
var('P,Q,δ,λ,θ,L,EA')
equ221=Eq(2*Q*cos(θ),P)
equ222=Eq(λ         ,Q*L/EA)
equ223=Eq(λ         ,δ*cos(θ))
print("#",solve([equ221,equ222,equ223],[δ,λ,Q])[δ].subs({θ:pi/6}))
# 2*L*P/(3*EA)
```
```python
# (V形) 3部材トラス 村上敬宣著 森北出版　P10[例題2.3(2)]
from sympy import *
var('R,Q,P,δ,λ1,λ2,θ,L,EA')
equ225=Eq(R+2*Q*cos(θ),P)
equ226=Eq(λ1*cos(θ)   ,λ2)
equ227=Eq(λ1          ,R*cos(θ)*L/EA)
equ228=Eq(λ2          ,Q       *L/EA)
print("#",(solve([equ225,equ226,equ227,equ228],[λ1,λ2,Q,R])[λ1].subs({θ:pi/6})).simplify())
# 2*sqrt(3)*L*P/(EA*(4 + 3*sqrt(3)))
```
```python
# (V形) 2部材トラスθ1,θ2,剛体　(1)エネルギー法 村上敬宣著 森北出版　P23[例題2.5]
from sympy import *
var('P,Q,R,δv,λ,θ1,θ2,L,EA')
rep={θ1:pi/6,θ2:pi/3}
equ250=Eq(Q*sin(θ2)-R*sin(θ1)  ,0)
equ251=Eq(Q*cos(θ2)+R*cos(θ1)-P,0)
sol   =solve([equ250,equ251],[R,Q])       #;print(sol)
R,Q   =sol[R].subs(rep),sol[Q].subs(rep)
λ     =Q*sqrt(3)*L/EA
print("#",solve(Eq(Rational(1,2)*P*δv,Rational(1,2)*Q*λ),δv)[0])
# sqrt(3)*L*P/(4*EA)
```
```python
# (V形) 2部材トラスθ1,θ2,剛体　(2)幾何学的条件 村上敬宣著 森北出版　P23[例題2.5]
from sympy import *
var('λ,P,Q,L,EA')
λ=P*sqrt(3)*L/EA
print("#",λ*sin(30*pi/180)*1/2)
# print("#",λ*cos(30*pi/180)*1/2)
# sqrt(3)*L*P/(4*EA)
```

# ２部材トラスをsympyのTrussで
#### ver0.1  
・/\　２部材トラス　何がなんでも、sympyのTrussで。
```python
# ver0.1
from sympy.physics.continuum_mechanics.truss import Truss
import math
from sympy import *
P=1     # var('P')
L=1     # var('L')
θ=pi/6  # var('θ')
t = Truss()
t.add_node     (('A',L*sin(θ),L*cos(θ))) 
t.add_node     (('B',0       ,0       ),('C',L*sin(θ)*2,0)) 
t.add_member   (('AB','A','B') ,('AC','A','C'))   
t.apply_support(('B' ,'pinned'),('C','pinned'))
t.apply_load   (('A' ,P,90))
p = t.draw()
p.show()
t.solve()
# print("#",t.reaction_loads )           
# print("#",t.internal_forces)
# 
var('Q,l,AE,x')
U= 1/(2*AE)*integrate((Q*t.internal_forces['AB'])**2,(x,0,l)) \
  +1/(2*AE)*integrate((Q*t.internal_forces['AC'])**2,(x,0,l)) 
print("#",str(diff(U,Q)).replace("Q","P"))
# 2*P*l/(3*AE)
```
・上下をひっくり返して見て下さい。
![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/c02eaa74-dd65-4f91-b2a3-babc7fa10a2c.png)

#### ver0.2  
・\/　２部材トラス　何がなんでも、sympyのTrussで。
```python
# ver0.2
from sympy.physics.continuum_mechanics.truss import Truss
import math
from sympy import *
P=1     # var('P')
L=1     # var('L')
θ=pi/6  # var('θ')
dy=1
t = Truss()
t.add_node     (('B',0       ,0        +dy),('C',L*sin(θ)*2,0+dy)) 
t.add_node     (('A',L*sin(θ),-L*cos(θ)+dy)) 
t.add_member   (('AB','A','B') ,('AC','A','C'))   
t.apply_support(('B' ,'pinned'),('C','pinned'))
t.apply_load   (('A' ,P,270))
p = t.draw()
p.show()
t.solve()
# print("#",t.reaction_loads )           
# print("#",t.internal_forces)
# 
var('Q,l,AE,x')
U= 1/(2*AE)*integrate((Q*t.internal_forces['AB'])**2,(x,0,l)) \
  +1/(2*AE)*integrate((Q*t.internal_forces['AC'])**2,(x,0,l)) 
print("#",str(diff(U,Q)).replace("Q","P"))
# 2*P*l/(3*AE)
```
![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/13009135-cac9-4667-9818-15998b506f05.png)

#### ver0.3
・\/　２部材トラス　何がなんでも、sympyのTrussで。
```python
# # ver0.3
from sympy.physics.continuum_mechanics.truss import Truss
import math
from sympy import *
P=1     # var('P')
L=1     # var('L')
θ=pi/6  # var('θ')
t = Truss()
t.add_node     (('B',0       ,L*cos(θ)),('C',2*L*sin(θ),L*cos(θ)))
t.add_node     (('A',L*sin(θ),0)) 
t.add_member   (('AB','A','B') ,('AC','A','C'))   
t.apply_support(('B' ,'pinned'),('C','pinned'))
t.apply_load   (('A' ,P,270))
p = t.draw()
p.show()
t.solve()
# print("#",t.reaction_loads )           
# print("#",t.internal_forces)
# 
var('Q,l,AE,x')
U= 1/(2*AE)*integrate((Q*t.internal_forces['AB'])**2,(x,0,l)) \
  +1/(2*AE)*integrate((Q*t.internal_forces['AC'])**2,(x,0,l)) 
print("#",str(diff(U,Q)).replace("Q","P"))
# 2*P*l/(3*AE)
```
![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/6871c2a6-1f11-4dd3-b4c4-2e8c31c37295.png)

#### 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)がありました。
　作成中です。

# 3部材トラスをsympyのTrussで,できませんでした。
#### ver0.1
・sympyのTrussは、3部材トラスが苦手でした。
```python
# ver0.1
from sympy.physics.continuum_mechanics.truss import Truss
import math
from sympy import *
P=1     # var('P')
L=1     # var('L')
θ=pi/6  # var('θ')
t = Truss()
t.add_node     (          ('A',L*sin(θ),L*cos(θ))) 
t.add_node     (('B',0,0),('D',L*sin(θ),0        ),('C',L*sin(θ)*2,0)) 
t.add_member   (('AB','A','B') ,('AD','A','D'),('AC','A','C'))   
t.apply_support(('B' ,'pinned'),('D','pinned'),('C','pinned'))
t.apply_load   (('A' ,P,90))
p = t.draw()
p.show()
t.solve()
# print("#",t.reaction_loads )           
# print("#",t.internal_forces)
# 
var('Q,l,AE,x')
U= 1/(2*AE)*integrate((Q*t.internal_forces['AB'])**2,(x,0,l)) \
  +1/(2*AE)*integrate((Q*t.internal_forces['AD'])**2,(x,0,l)) \
  +1/(2*AE)*integrate((Q*t.internal_forces['AC'])**2,(x,0,l)) 
print("#",str(diff(U,Q)).replace("Q","P"))
# ValueError: The given truss cannot be solved
```

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

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

#### 文献

https://www.amazon.co.jp/%E6%9D%90%E6%96%99%E5%8A%9B%E5%AD%A6-%E6%96%B0%E8%A3%85%E7%89%88-%E6%9D%91%E4%B8%8A-%E6%95%AC%E5%AE%9C/dp/4627605129