# 質問リスト
1. 2ヒンジ門型ラーメンの鉛直集中荷重の材端モーメント・反力・変形を教えて下さい。
2. 上記をsympy のソースコードで、シンボリックな変数で教えて下さい。
3. 上記の条件で、たわみ角法のsympy のソースコードを教えて下さい。
4. 上記のソースコードをマトリックス表示のソースコードを教えて下さい。
5. 上記の計算結果をmarkdown形式で教えて下さい。
6. 追加で、sympy の計算結果で教えて下さい。
7. 上記のmarkdown形式でなく普通の表示で教えて下さい。
8. 上記をprint文で教えて下さい。
9. 私の質問をMarkdown形式でリスト化して出力して。Markdown形式でリストからアスタリスクは削除して。1行目に、# 質問リスト の文字を出力して。
ChatGPT先生へ
ChatGPT の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。
回答抜粋
・以下、私は実行していません。
import sympy as sp
# シンボリック変数の定義
P, H, L, x_P = sp.symbols('P H L x_P') # 荷重, 柱高さ, 梁スパン, 荷重位置
E, I_c, I_b = sp.symbols('E I_c I_b') # ヤング率, 柱の断面二次モーメント, 梁の断面二次モーメント
# 1. 反力計算 (静力学のつり合い)
RA, RB = sp.symbols('RA RB') # 支点反力
eq1 = sp.Eq(RA + RB, P) # 鉛直方向の力のつり合い
eq2 = sp.Eq(RA * L - P * x_P, 0) # モーメントのつり合い (左端で取る)
# 反力を解く
reactions = sp.solve((eq1, eq2), (RA, RB))
RA_val, RB_val = reactions[RA], reactions[RB]
# 2. 材端モーメントの計算
# 梁の端部モーメント (柱との接続部)
M_A = -RA_val * 0 # 左端モーメント
M_B = -RB_val * L # 右端モーメント
# 3. 変形の計算(簡易的な梁のたわみ解析)
x = sp.symbols('x') # 位置座標
M_x = sp.Piecewise(
(RA_val * x, x < x_P), # 左側の曲げモーメント
(RA_val * x - P * (x - x_P), x >= x_P) # 右側の曲げモーメント
)
# たわみ方程式 (EI y'' = M)
y_x = sp.integrate(sp.integrate(M_x / (E * I_b), x), x)
# 結果表示
print(f"反力: RA = {RA_val}, RB = {RB_val}")
print(f"材端モーメント: M_A = {M_A}, M_B = {M_B}")
print(f"変形方程式: y(x) = {y_x.simplify()}")
import sympy as sp
# シンボリック変数の定義
P, H, L, x_P = sp.symbols('P H L x_P') # 荷重, 柱高さ, 梁スパン, 荷重位置
E, I_c, I_b = sp.symbols('E I_c I_b') # ヤング率, 柱の断面二次モーメント, 梁の断面二次モーメント
theta_A, theta_B = sp.symbols('theta_A theta_B') # 端部回転角
# 1. 固定端モーメントの計算(集中荷重 P の場合)
M_fA = -P * x_P * (L - x_P)**2 / L**2 # 左端
M_fB = P * (L - x_P) * x_P**2 / L**2 # 右端
# 2. たわみ角法の基本式
M_AB = (2 * E * I_b / L) * (2 * theta_A + theta_B) + M_fA
M_BA = (2 * E * I_b / L) * (2 * theta_B + theta_A) + M_fB
# 3. 柱のモーメント平衡条件
eq1 = sp.Eq(M_AB + M_BA, 0) # 全体のモーメントのつり合い
# 4. たわみ角を求める
solution = sp.solve(eq1, (theta_A, theta_B))
# 5. たわみ角を代入して最終的なモーメントを求める
M_AB_sol = M_AB.subs(solution)
M_BA_sol = M_BA.subs(solution)
# 結果表示
print(f"端部モーメント: M_AB = {M_AB_sol}, M_BA = {M_BA_sol}")
import sympy as sp
# シンボリック変数の定義
P, H, L, x_P = sp.symbols('P H L x_P') # 荷重, 柱高さ, 梁スパン, 荷重位置
E, I_b = sp.symbols('E I_b') # ヤング率, 梁の断面二次モーメント
theta_A, theta_B = sp.symbols('theta_A theta_B') # 端部回転角
# 1. 固定端モーメント(FEM)
M_fA = -P * x_P * (L - x_P)**2 / L**2 # 左端の固定端モーメント
M_fB = P * (L - x_P) * x_P**2 / L**2 # 右端の固定端モーメント
# 2. 係数行列 [K] の定義
K = (2 * E * I_b / L) * sp.Matrix([[4, 2], [2, 4]])
# 3. 不明モーメントの式
Theta = sp.Matrix([theta_A, theta_B]) # たわみ角ベクトル
FEM = sp.Matrix([M_fA, M_fB]) # 固定端モーメントベクトル
M = K * Theta + FEM # 端部モーメントの式
# 4. モーメントつり合い条件 M_AB + M_BA = 0
eq = sp.Eq(M[0] + M[1], 0)
# 5. たわみ角を求める
solution = sp.solve(eq, (theta_A, theta_B))
# 6. たわみ角を代入して最終的なモーメントを求める
M_AB_sol = M[0].subs(solution)
M_BA_sol = M[1].subs(solution)
# 結果表示
print("剛性マトリックス [K]:")
sp.pprint(K)
print("\n固定端モーメント [FEM]:")
sp.pprint(FEM)
print("\n求めた端部モーメント:")
sp.pprint(sp.Matrix([M_AB_sol, M_BA_sol]))
計算結果
剛性マトリックス [K]:
K = (2EI / L) *
| 4 2 |
| 2 4 |
固定端モーメント [FEM]:
FEM =
| -P * x_P * (L - x_P)^2 / L^2 |
| P * (L - x_P) * x_P^2 / L^2 |
求めた端部モーメント:
M_AB = -4*E*I_b*theta_B/L - P*x_P - P*x_P**3/L**2
M_BA = (4*E*I_b*L*theta_B - P*x_P**3)/L**2
この print 文を Python で実行すれば、同じ形式で表示されます。
Gemini先生へ
copilot先生へ
いつもの? sympyの実行環境と 参考のおすすめです。