0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

材料力学「はりのたわみ曲線導出」をAI先生に聞きました。

Posted at

・私のこんなアバウトな質問にも、丁寧に回答をいただきました。ありがとうございます。

# 質問リスト
1. はり上に中間荷重がないときのはりの微分方程式から、節点変位であらわしたたわみ曲線を導出して下さい。
2. 上記をsympy のソースコードで教えて下さい。
3. 上記をsympyのマトリックスを使ったソースコードで教えて下さい。
4. 上記のマトリックスを使って、連続はりのsympy のソースコードを教えて下さい。

ChatGPT先生へ

ChatGPT の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。
回答抜粋

・以下、私は実行していません。

import sympy as sp

# 変数定義
x, L = sp.symbols('x L')  # 位置 x, はりの長さ L
w1, w2 = sp.symbols('w1 w2')  # 節点変位
θ1, θ2 = sp.symbols('theta1 theta2')  # 節点回転角

# たわみ関数を3次式として仮定
a0, a1, a2, a3 = sp.symbols('a0 a1 a2 a3')
w = a0 + a1*x + a2*x**2 + a3*x**3

# 境界条件設定
eq1 = sp.Eq(w.subs(x, 0), w1)  # w(0) = w1
eq2 = sp.Eq(w.subs(x, L), w2)  # w(L) = w2
eq3 = sp.Eq(sp.diff(w, x).subs(x, 0), θ1)  # w'(0) = θ1
eq4 = sp.Eq(sp.diff(w, x).subs(x, L), θ2)  # w'(L) = θ2

# 連立方程式を解く
sol = sp.solve([eq1, eq2, eq3, eq4], (a0, a1, a2, a3))

# たわみ曲線
w_expr = w.subs(sol)

# 結果表示
sp.pretty_print(w_expr)
import sympy as sp

# 変数定義
x, L = sp.symbols('x L')  # 位置 x, はりの長さ L
w1, w2 = sp.symbols('w1 w2')  # 節点変位
θ1, θ2 = sp.symbols('theta1 theta2')  # 節点回転角

# 係数 a0, a1, a2, a3
a = sp.Matrix(sp.symbols('a0 a1 a2 a3'))

# たわみ関数を3次式として仮定
w = sp.Matrix([1, x, x**2, x**3]).T * a  # 行ベクトル×列ベクトルの積

# 境界条件の行列方程式を設定
eqs = sp.Matrix([
    [1,  0,   0,    0],  # x=0 における w = w1
    [0,  1,   0,    0],  # x=0 における w' = θ1
    [1,  L,  L**2, L**3],  # x=L における w = w2
    [0,  1, 2*L,  3*L**2]  # x=L における w' = θ2
])

rhs = sp.Matrix([w1, θ1, w2, θ2])  # 右辺の値

# 連立方程式を解く
sol = eqs.LUsolve(rhs)  # 行列を使って解を求める

# たわみ曲線の最終式
w_expr = sp.simplify(sp.Matrix([1, x, x**2, x**3]).T * sol)

# 結果表示
sp.pretty_print(w_expr)

連続はり(多スパンはり)の SymPy コード(マトリックス利用)

import sympy as sp

# 変数定義
x, L1, L2 = sp.symbols('x L1 L2')  # 位置 x、スパン長 L1, L2
w1, w2, w3 = sp.symbols('w1 w2 w3')  # 各節点の変位
θ1, θ2, θ3 = sp.symbols('theta1 theta2 theta3')  # 各節点の回転角

# 係数ベクトル (各スパンの3次係数)
a1 = sp.Matrix(sp.symbols('a10 a11 a12 a13'))  # スパン1の係数
a2 = sp.Matrix(sp.symbols('a20 a21 a22 a23'))  # スパン2の係数

# スパンごとのたわみ関数
w1_expr = sp.Matrix([1, x, x**2, x**3]).T * a1  # スパン1 (0 ≤ x ≤ L1)
w2_expr = sp.Matrix([1, x - L1, (x - L1)**2, (x - L1)**3]).T * a2  # スパン2 (L1 ≤ x ≤ L1+L2)

# 境界条件の行列設定(節点変位・回転条件)
eqs = sp.Matrix([
    [1, 0, 0, 0,  0, 0, 0, 0],  # w1_expr(0) = w1
    [0, 1, 0, 0,  0, 0, 0, 0],  # w1_expr'(0) = θ1
    [1, L1, L1**2, L1**3, -1, 0, 0, 0],  # w1_expr(L1) = w2 = w2_expr(L1)
    [0, 1, 2*L1, 3*L1**2,  0, -1, 0, 0],  # w1_expr'(L1) = w2_expr'(L1)
    [0, 0, 2, 6*L1,  0, 0, -2, 0],  # w1_expr''(L1) = w2_expr''(L1)
    [0, 0, 0, 6,  0, 0, 0, -6],  # w1_expr'''(L1) = w2_expr'''(L1)
    [0, 0, 0, 0,  1, L1+L2, (L1+L2)**2, (L1+L2)**3],  # w2_expr(L1+L2) = w3
    [0, 0, 0, 0,  0, 1, 2*(L1+L2), 3*(L1+L2)**2]  # w2_expr'(L1+L2) = θ3
])

rhs = sp.Matrix([w1, θ1, w2, θ2, 0, 0, w3, θ3])  # 右辺の値

# 連立方程式を解く
sol = eqs.LUsolve(rhs)

# 各スパンのたわみ曲線を求める
w1_final = sp.simplify(sp.Matrix([1, x, x**2, x**3]).T * sol[:4])  # スパン1
w2_final = sp.simplify(sp.Matrix([1, x - L1, (x - L1)**2, (x - L1)**3]).T * sol[4:])  # スパン2

# 結果表示
sp.pretty_print(w1_final)
sp.pretty_print(w2_final)

Gemini先生へ

copilot先生へ

いつもの? sympyの実行環境と 参考のおすすめです。

(テンプレート)

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

wikipedia

Qiita

Google検索

文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?