User
あなた:
sympyで、マコーレーの括弧を使って、片持ち梁の2つの荷重の弾性方程式を表示して下さい。
わかりませんでした。ChatGPT先生へ
回答抜粋
from sympy import symbols, Piecewise, integrate, Function
# シンボルの定義
x, x1, x2, P1, P2, E, I = symbols('x x1 x2 P1 P2 E I')
v = Function('v')(x) # 変位 v(x)
# モーメント M(x) の定義 (マコーレー括弧をPiecewiseで表現)
M = Piecewise(
(P1 * (x - x1), x >= x1),
(0, True)
) + Piecewise(
(P2 * (x - x2), x >= x2),
(0, True)
)
# 弾性方程式の計算 (1/EI を考慮)
v_eq = integrate(integrate(M / (E * I), x), x)
# 結果を表示
v_eq
print("#",v_eq) # (2024-12-14) 私が追加しました。
??? 結果の省略
わかりませんでした。Gemini先生へ
回答抜粋
import sympy as sp
# 変数の定義
x, L, a, b, P1, P2, E, I = sp.symbols('x L a b P1 P2 E I')
# マコーレーの括弧を定義する関数
def macaulay(x, a):
return sp.Heaviside(x-a)*(x-a)
# 曲げモーメントM(x)
M = P1 * macaulay(x, a) + P2 * macaulay(x, b)
# 弾性曲線y(x)の微分方程式
y_diff = sp.integrate(sp.integrate(M/(E*I), x), x)
# 境界条件:x=Lでy=0, y'=0
C1, C2 = sp.symbols('C1 C2')
y = y_diff + C1*x + C2
y_prime = sp.diff(y, x)
eq1 = y.subs(x, L)
eq2 = y_prime.subs(x, L)
# 境界条件から定数C1, C2を求める
sol = sp.solve([eq1, eq2], (C1, C2))
# 弾性曲線y(x)にC1, C2を代入
y = y.subs(sol)
# 結果を表示
# sp.pprint(y)
from sympy import * # (2024-12-14) 私が追加しました。
print("#",y ) # (2024-12-14) 私が追加しました。
print("#",y.subs({x:a}) ) # (2024-12-14) 私が追加しました。
print("#",y.subs({x:a+b})) # (2024-12-14) 私が追加しました。
print("#",y.subs({x:L}) ) # (2024-12-14) 私が追加しました。
??? 結果の省略
いつもと違うおすすめです。
> マコーレー括弧