(再)以下おすすめです。
https://qiita.com/mrrclb48z/items/369b66044a32fdc3c8ee#sympy%E3%81%A7bettis-theorem%E3%81%A7
・以下、正しいのか、私の力で判断できませんでした。申し訳ありません。
・???sympyのコードを聞きました。
マクスウェルの相反定理を使うと、何を計算できますか。入力条件も教えて下さい。
ChatGPT先生へ
(回答抜粋)
・たわみの計算:...
・荷重の影響の分析:...
相反定理の内容
「線形弾性体において、ある点 𝐴に単位荷重を作用させた場合に点 B で発生する変位は、点 B に同じ単位荷重を作用させたときに点 A で発生する変位と等しい。」
上記の具体例の、sympyのソースコードを教えて下さい。
(回答抜粋)
from sympy import symbols, integrate, solve
# 定数の定義
L, E, I = symbols('L E I') # 梁の長さ、弾性係数、断面2次モーメント
P = symbols('P') # 荷重
# 座標
x = symbols('x')
# 梁のたわみ曲線方程式 (EI * y'' = M(x))
# 点Aで荷重Pを加えた場合のモーメント
a = L / 4 # 荷重点 (例として梁の長さLの1/4点に設定)
M_A = P * (a - x)
# 曲げモーメントからたわみを求める
# EI * y'' = M(x) を2回積分する
theta_A = integrate(M_A / (E * I), x) # 角度
y_A = integrate(theta_A, x) # たわみ
# 境界条件(単純支持)
# 両端でたわみがゼロ (y(0) = 0, y(L) = 0)
C1, C2 = symbols('C1 C2')
y_A = y_A + C1 * x + C2
boundary_conditions = [
y_A.subs(x, 0), # y(0) = 0
y_A.subs(x, L) # y(L) = 0
]
constants = solve(boundary_conditions, [C1, C2])
y_A = y_A.subs(constants)
# 任意の点Bでの変位を求める
b = L / 2 # 例: 点Bは梁の中央
delta_AB = y_A.subs(x, b) # 点Aに荷重を加えたとき点Bでの変位
# 点Bに荷重を加えた場合
M_B = P * (b - x)
theta_B = integrate(M_B / (E * I), x)
y_B = integrate(theta_B, x)
y_B = y_B + C1 * x + C2
constants_B = solve([y_B.subs(x, 0), y_B.subs(x, L)], [C1, C2])
y_B = y_B.subs(constants_B)
# 点Aでの変位
delta_BA = y_B.subs(x, a)
# マクスウェルの相反定理の確認
print("点Aに荷重を加えたときの点Bでの変位 (δ_AB):", delta_AB)
print("点Bに荷重を加えたときの点Aでの変位 (δ_BA):", delta_BA)
print("相反定理が成立:", delta_AB.equals(delta_BA))
結果を教えて下さい。
(回答抜粋)
相反定理が成立していません (False)。
再確認をお願いします。
(回答抜粋)
続けて下さい。
(回答抜粋)
>あきらめました。
Gemini先生へ
(回答抜粋)
- 電圧源と電流の関係(相反定理の基本的な形)...
- 電流源と電圧の関係...
- 電流源と電圧の関係...
材料力学はどうですか
(回答抜粋)
- 集中荷重と変位の関係
- 応用例
・構造解析の簡略化:..
未知のパラメータの推定:...
材料力学で、マクスウェルの相反定理を使ったSymPyのコードを教えて下さい。
(回答抜粋)
例:片持ち梁のたわみ
from sympy import symbols, integrate, Piecewise
# 記号の定義
x, L, a, b, E, I, Pa, Pb = symbols('x L a b E I Pa Pb', real=True, positive=True)
# 曲げモーメントの定義 (点aにPaが作用する場合)
Ma = Piecewise(
(Pa * (a - x), x <= a),
(0, x > a)
)
# 曲げモーメントの定義 (点bにPbが作用する場合)
Mb = Piecewise(
(Pb * (b - x), x <= b),
(0, x > b)
)
# たわみの計算 (点aにPaが作用する場合の点bのたわみδba)
delta_ba = integrate(Ma * Mb / (E * I), (x, 0, L)).subs(Pb, 1)
# たわみの計算 (点bにPbが作用する場合の点aのたわみδab)
delta_ab = integrate(Mb * Ma / (E * I), (x, 0, L)).subs(Pa, 1)
# 結果の表示
print("δba:", delta_ba)
print("δab:", delta_ab)
# a, b, Lに具体的な値を代入して確認
delta_ba_num = delta_ba.subs({a: L/3, b: 2*L/3, L: 3, E: 1, I: 1}).simplify()
delta_ab_num = delta_ab.subs({a: L/3, b: 2*L/3, L: 3, E: 1, I: 1}).simplify()
print("δba (数値例):", delta_ba_num)
print("δab (数値例):", delta_ab_num)
# δbaとδabが等しいか確認
print("δba == δab:", delta_ba_num == delta_ab_num)
# 別の数値例でも確認
delta_ba_num2 = delta_ba.subs({a: L/4, b: 3*L/4, L: 4, E: 1, I: 1}).simplify()
delta_ab_num2 = delta_ab.subs({a: L/4, b: 3*L/4, L: 4, E: 1, I: 1}).simplify()
print("δba (数値例2):", delta_ba_num2)
print("δab (数値例2):", delta_ab_num2)
print("δba == δab (数値例2):", delta_ba_num2 == delta_ab_num2)
出力例:
δba: a**2*b**2*(3*L - a - b)/(6*E*I)
δab: a**2*b**2*(3*L - a - b)/(6*E*I)
δba (数値例): 2.0
δab (数値例): 2.0
δba == δab: True
δba (数値例2): 3.0
δab (数値例2): 3.0
δba == δab (数値例2): True
中断しました。
copilot先生へ
いつもの? sympyの実行環境と 参考のおすすめです。
いつもと違うおすすめです。
wikipedia
参考文献
>平衡方程式、Cauchyの公式、Green-Gaussの定理などを用いて変形すれば...
- 機械工学大系 6 弾性体の変形
4.8 相反定理
p110