Betti's theorem「マクスウェルの相反定理を使うと、何を計算できますか。入力条件も教えて下さい。」をAI先生に教えてもらう(1/2)

(再)以下おすすめです。
https://qiita.com/mrrclb48z/items/369b66044a32fdc3c8ee#sympy%E3%81%A7bettis-theorem%E3%81%A7
　
・以下、正しいのか、私の力で判断できませんでした。申し訳ありません。
・???sympyのコードを聞きました。

:::note info
次　 [「画像より(2/2)」
](https://qiita.com/mrrclb48z/items/6390697cc002526e3867)
:::

**マクスウェルの相反定理を使うと、何を計算できますか。入力条件も教えて下さい。**

# ChatGPT先生へ

>(回答抜粋)
>・たわみの計算：...
・荷重の影響の分析：...
相反定理の内容
「線形弾性体において、ある点 𝐴に単位荷重を作用させた場合に点 B で発生する変位は、点 B に同じ単位荷重を作用させたときに点 A で発生する変位と等しい。」

上記の具体例の、sympyのソースコードを教えて下さい。

>(回答抜粋)
```python
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先生へ
>(回答抜粋)
1. 電圧源と電流の関係（相反定理の基本的な形）...
2. 電流源と電圧の関係...
2. 電流源と電圧の関係...

材料力学はどうですか
>(回答抜粋)
>1. 集中荷重と変位の関係
>2. 応用例
>・構造解析の簡略化:..
>未知のパラメータの推定:... 

材料力学で、マクスウェルの相反定理を使ったSymPyのコードを教えて下さい。
>(回答抜粋)
例：片持ち梁のたわみ
```python
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の実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

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

https://en.wikipedia.org/wiki/Betti%27s_theorem

https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%AF%E3%82%B9%E3%82%A6%E3%82%A7%E3%83%AB%E3%83%BB%E3%83%99%E3%83%86%E3%82%A3%E3%81%AE%E7%9B%B8%E5%8F%8D%E4%BD%9C%E7%94%A8%E3%81%AE%E5%AE%9A%E7%90%86



#### 参考文献
＞平衡方程式、Cauchyの公式、Green-Gaussの定理などを用いて変形すれば...
- 機械工学大系 6　弾性体の変形　
4.8 相反定理
p110

https://www.coronasha.co.jp/np/isbn/9784339041682/

#### web 
(2025-05-02)

https://www.slideshare.net/slideshow/ii051-2020/239001067

＞

https://www.slideshare.net/KazuhiroSuga

＞

https://ferret-plus.com/8483

https://ja.wikipedia.org/wiki/SlideShare