懸垂線(改訂版) (7回目)

2025/8/15()
懸垂線(改訂版) (7回目)
 
(catenary)
懸垂線(カテナリー、紐を垂らしたときの曲線)
 
■ 前提
 定義
g  :重力加速度[m/s2]
ρ :紐の線密度[kg/m]
L  :紐の長さ[m] (0 < √(x12 + y12) < L)
y1 :紐の左端に対する右端の高さ[m]
x1 :紐の右端のx座標[m]
x0 :紐の底のx座標[m]
H  :水平張力[N] (紐の頂点での張力)
y  :紐の高さ[m] (紐の左端を原点とするxの関数)
y' :紐の傾き
 
 
 紐の底のx座標x0 
λ = H/(ρg) と置く
y(x) = λ{cosh(x/λ - x0/λ) - cosh(x0/λ)}
y'(x) = sinh(x/λ - x0/λ)
L = λ{sinh(x1/λ - x0/λ) + sinh(x0/λ)}
x0 = (1/2)(x1 - λlog{(1 + y1/L)/(1 - y1/L)})  … (y1/L > 0)
 
 問題
(4) H  g,ρ,L,x1,y1 から求める方法を示せ
 
 
ニュートン法
 説明 













y = f(x)のxでの接線の傾きは微分したy'= f'(x)で
x = aの時の接線は
y - f(a) = f'(a)(x - a)より
y = f'(a)(x - a) + f(a)
これと、x軸(y = 0)との交点は
f'(a)(x - a) + f(a) = 0より
x = {af'(a) - f(a)} / f'(a)
x = a - f(a)/f'(a)
 
 手順
x0 = a
x1 = a - f(a)/f'(a)
と置くと
xn+1 = xn - f(xn)/f'(xn)
これを、n=0,1,2, ... と繰返すと、
f(x) = 0の解の1つに近づく、
|f(xn)/f'(xn)| < ε
になるまで繰返す
 
 
マクローリン展開
 f(x)のマクローリン展開
f(0)(x) = ax2 + bx + c , f(0)(0) = c
f(1)(x) = 2ax + 1b , f(1)(0) = 1b
f(2)(x) = 12a , f(2)(0) = 12a
f(0)(x) = f(0)(0) + f(1)(0)x/1 + f(2)(0)x2/(1・2) + …
= Σn=0f(n)(0)xn/n!
 
 双曲線関数
cosh(x) = {exp(x) + exp(-x)}/2
sinh(x) = {exp(x) - exp(-x)}/2
{cosh(x)}' = {exp(x) - exp(-x)}/2 = sinh(x)
{sinh(x)}' = {exp(x) + exp(-x)}/2 = cosh(x)
 
 sinh(x)マクローリン展開
f(0)(x) = sinh(x), f(0)(0) = 0
f(1)(x) = cosh(x), f(1)(0) = 1
f(2)(x) = sinh(x), f(2)(0) = 0
f(3)(x) = cosh(x), f(3)(0) = 1
 
f(0)(x) = f(0)(0) + f(1)(0)x/1 + f(2)(0)x2/(1・2) + …
= x/1! + x3/3! + x5/5! + …
= x + x3/6 + x5/120 + …
 
sinh(x) = x + x3/6 + x5/120 + …
 
 
Hを解く
 Lについての式
L = λ{sinh(x1/λ - x0/λ) + sinh(x0/λ)}
x0 = (1/2)(x1 - λlog{(1 + y1/L)/(1 - y1/L)})
 
Hはλにのみ含まれる
α = log{(1 + y1/L)/(1 - y1/L)}と置く
x0 = (1/2)(x1 - λα)
x0/λ = x1/(2λ) - α/2
 
L/λ = sinh(x1/λ - x0/λ) + sinh(x0/λ)
= sinh(x1/λ - {x1/(2λ) - α/2}) + sinh(x1/(2λ) - α/2)
= sinh(x1/(2λ) + α/2) + sinh(x1/(2λ) - α/2)
= sinh(x1/(2λ))cosh(α/2) + cosh(x1/(2λ))sinh(α/2)
+ sinh(x1/(2λ))cosh(α/2) - cosh(x1/(2λ))sinh(α/2)
= 2sinh(x1/(2λ))cosh(α/2)
よって
2sinh(x1/(2λ))cosh(α/2) = L/λ
を変形して
(2/L)cosh(α/2)sinh(x1/(2λ)) - 1/λ = 0
 
β = (1/L)cosh(α/2)と置く
f(λ) = 2βsinh(x1/(2λ)) - 1/λ = 0
となるλを求める
 
 λの近似式
sinh(x)  x + x3/6  … マクローリン展開
|x|が小さいほど誤差が小さい
 
f(λ) = 2βsinh(x1/(2λ)) - 1/λ
マクローリン展開による近似式を求める
|x1/(2λ)|が大きいほど、Hが小さいほど誤差が大くなる
 
f(λ) = 2βsinh(x1/(2λ)) - 1/λ
 2β{x1/(2λ) + x13/(2λ)3/6} - 1/λ
= βx1/λ + βx13/(2λ)3/3 - 1/λ
= (βx1 - 1)/λ + βx13/λ3/(233) = 0
(βx1 - 1)λ2 + βx13/(233) = 0
λ  √{βx13/(233 - 233βx1)}  … (λ > 0, H > 0)より
= (x1/2)√{βx1/(6 - 6βx1)}
= x1/[2√{(6 - 6βx1)/βx1}]
= x1/[2√{6/(βx1) - 6}]
 
 f'(λ)を求める
f(λ) = 2βsinh(x1/(2λ)) - 1/λ
f'(λ) = -2β{x1/(2λ2)}cosh(x1/(2λ)) + 1/λ2 
= (1/λ2){1 - βx1cosh(x1/(2λ))}
 
 
 ニュートン法
α = log{(1 + y1/L)/(1 - y1/L)}と置く  … (αにHは含まれていない)
β = (1/L)cosh(α/2)と置く  … (βにHは含まれていない)
f(λ) = 2βsinh(x1/(2λ)) - 1/λ = 0
f'(λ) = (1/λ2){1 - βx1cosh(x1/(2λ))}
λ  x1/[2√{6/(βx1) - 6}]  … 近似式
 
初期値λ0 = x1/[2√{6/(βx1) - 6}]  … 近似式
Δλn = f(λn)/f'(λn)
λn+1 = λn - Δλn 
λ = λn+1 (if λn| < ε)
以上により誤差ε程度で λ を求めることができる
 
 Hを求める
λ = H/(ρg) より
H = ρgλ
 
 
■ 結果
 定義
g  :重力加速度[m/s2]
ρ :紐の線密度[kg/m]
L  :紐の長さ[m] (0 < √(x12 + y12) < L)
y1 :紐の左端に対する右端の高さ[m]
x1 :紐の右端のx座標[m]
x0 :紐の底のx座標[m]
H  :水平張力[N] (紐の頂点での張力)
y  :紐の高さ[m] (紐の左端を原点とするxの関数)
 
λ = H/(ρg) と置くH = ρgλ
 
 y(x)のグラフ
λをニュートン法で求める
α = log{(1 + y1/L)/(1 - y1/L)}と置く
β = (1/L)cosh(α/2)と置く
f(λ) = 2βsinh(x1/(2/λ)) - 1/λ = 0
f'(λ) = (1/λ2){1 - βx1cosh(x1/(2λ))}
 
初期値λ0 = x1/[2√{6/(βx1) - 6}]      … 近似式
Δλn = f(λn)/f'(λn)
λn+1 = λn - Δλn 
λ = λn+1 (if λn| < ε)
以上により誤差ε程度で λ を求めることができる
 
L, x1, y1 から求めたλ以下に代入
α = log{(1 + y1/L)/(1 - y1/L)}と置く
x0 = (1/2)(x1 - λα)
y(x) = λ{cosh(x - x0) - cosh(x0)}
 

このブログの人気の投稿

NEWS

N88-BASICでゲーム (1回目)

d88ファイルの変換 (1回目)