・Trussで作図しました。
目次
オリジナル
(2025-09-04) 未
・過去問.com 一級建築士 様
>令和6年(2024年)〜平成27年(2015年)まで無料で公開しています。
しばらくは 公式ホームページ で
(2025)令和7年一級試験問題〔No.5〕と正答肢
https://www.jaeic.or.jp/shiken/1k/1k-mondai.files/1k-2025-1st-gakka4_5.pdf#page=6
https://www.jaeic.or.jp/shiken/1k/1k-mondai.files/1k-2025-1st-gokakukijun.pdf
https://www.jaeic.or.jp/smph/shiken/1k/1k-mondai.html
sympyで(オリジナル 様の方法を参考に)
ver0.1
(2025-09-04) 未
sympyのTrussで
・以下、資源の無駄使いカモ。
ver1.3
# ver1.3
from sympy.physics.continuum_mechanics.truss import Truss
from sympy import *
var('P')
var('L,l,EA',positive=True)
def renamed_only(d, rename_map):
"""
rename_map に従ってリネームされたキーのみを抽出し、
元の順序(rename_map のキー順)で返す。
Parameters:
- d (dict): 元の辞書
- rename_map (dict): {"旧キー": "新キー"} 形式
Returns:
- dict: リネーム後の辞書(リネーム対象のみ)
"""
renamed = {
rename_map[k]: d[k]
for k in rename_map
if k in d
}
return renamed
# -------------------------------------------------------------------------------------
def myTrussAB(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 (('7',0,3*l),('8',l,3*l), \
('5',0,2*l),('6',l,2*l), \
('3',0,1*l),('4',l,1*l), \
('1',0,0 ),('2',l,0 ))
myAdd_member ( '78', \
'57','58','68', \
'56', \
'35','36','46', \
'34', \
'13','14','24', \
'12')
t.apply_support(('1','pinned'), \
('2','roller'))
t.apply_load (('7',3*P,0))
return t
myTrussAB(1).draw().show() # AB_作図用のため(l=1)
t_AB=myTrussAB(l);t_AB.solve() # AB_計算のみ
# -------------------------------------------------------------------------------------
def myTrussCD(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 (('7',0,3*l),('8',l,3*l), \
('5',0,2*l),('6',l,2*l), \
('3',0,1*l),('4',l,1*l), \
('1',0,0 ),('2',l,0 ))
myAdd_member ( '78', \
'57','58','68', \
'56', \
'35','36','46', \
'34', \
'13','14','24', \
'12')
t.apply_support(('1','pinned'), \
('2','roller'))
t.apply_load (('7',P,0), \
('5',P,0), \
('3',P,0))
return t
myTrussCD(1).draw().show() # CD_作図用のため(l=1)
t_CD=myTrussCD(l);t_CD.solve() # CD_計算のみ
# -------------------------------------------------------------------------------------
print("#",renamed_only({k:v.simplify() for k,v in t_AB.internal_forces.items()} , \
{'35':'NA','36':'NB'}))
print("#",renamed_only({k:v.simplify() for k,v in t_CD.internal_forces.items()} , \
{'35':'NC','36':'ND'}))
# {'NA': 3*P, 'NB': 3*sqrt(2)*P}
# {'NC': P, 'ND': 2*sqrt(2)*P}
正答肢 4
sympyのTrussをChatGPT先生に丸投げ
・(本日の)ChatGPT先生の回答
いつもの? sympyの実行環境と 参考のおすすめです。
いつもと違うおすすめです。
Qiita内
・類題が多数あります。
sympyのdoc