Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

物理計算の単位

この例では、物理計算において単位を扱う方法を説明します。落下するパラシュート兵の終端速度を、SI 単位と帝国単位の両方で計算します。重力と抗力を考慮して、パラシュート兵の動きを解きます。

はじめに

航空機から飛び出すパラシュート兵を想像してください。パラシュート兵に働く力は、重力とパラシュートからの逆向きの抗力の 2 つしかないと仮定します。抗力は、パラシュート兵の速度の 2 乗に比例します。

パラシュート兵に働く合力は次のように表現できます。

massacceleration=dragforcegravitationalforce,

mtv(t)=cdv(t)2mg,

ここで、

  • m はパラシュート兵の質量

  • g は重力加速度

  • v(t) はパラシュート兵の速度

  • cd は空気抵抗係数

運動方程式の定義と求解

運動方程式を表現する微分方程式を定義します。

syms g m c_d
syms v(t)
eq = m*diff(v(t),t) + m*g == c_d*v(t)^2
eq = 

mt v(t)+gm=cdv(t)2m*diff(v(t), t) + g*m == c_d*v(t)^2

パラシュートは t=0 で即座に開くため、方程式 eqt0 のすべての値に対して有効です。dsolve を初期条件 v(0)=0 で使用して微分方程式を解析的に解きます。解では、パラシュート兵の速度を時間の関数として表現しています。

velocity = simplify(dsolve(eq, v(0) == 0))
velocity = 

-gmtanh(cdgtm)cd-(sqrt(g)*sqrt(m)*tanh((sqrt(c_d)*sqrt(g)*t)/sqrt(m)))/sqrt(c_d)

空気抵抗係数の単位系を求める

SI 単位系における空気抵抗係数 cd の単位を求めます。

力の SI 単位はニュートン (N) です。基本単位に関しては、ニュートンは (kgms2) です。これらは等しいため、単位換算率は 1 です。

u = symunit;
unitConversionFactor(u.N, u.kg*u.m/u.s^2)
ans = 1sym(1)

抗力 cdv(t)2 はニュートン (N) で重力 mg と同じ単位でなければなりません。次元解析を使用して cd の単位について解きます。

syms drag_units_SI
drag_units_SI = simplify(solve(drag_units_SI * (u.m / u.s)^2 == u.N))
drag_units_SI = 

1kg"kilogram - a physical unit of mass."m"meter - a physical unit of length."sym(1)*(symunit('kg')/symunit('m'))

終端速度の推定

以下の値を定義してパラシュート兵の動きを記述します。

  • パラシュート兵の質量 m=70kg

  • 重力加速度 g=9.81m/s2

  • 空気抵抗係数 cd=40kg/m

これらの値を速度方程式に代入して、結果を単純化します。

vel_SI = subs(velocity,[g,m,c_d],[9.81*u.m/u.s^2, 70*u.kg, 40*drag_units_SI])
vel_SI = 

-tanh(t40kg"kilogram - a physical unit of mass."m"meter - a physical unit of length."981100m"meter - a physical unit of length."s"second - a physical unit of time."270kg"kilogram - a physical unit of mass.")70kg"kilogram - a physical unit of mass."981100m"meter - a physical unit of length."s"second - a physical unit of time."240kg"kilogram - a physical unit of mass."m"meter - a physical unit of length."-(tanh((t*sqrt(sym(40)*(symunit('kg')/symunit('m')))*sqrt(sym(981/100)*(symunit('m')/symunit('s')^sym(2))))/sqrt(sym(70)*symunit('kg')))*sqrt(sym(70)*symunit('kg'))*sqrt(sym(981/100)*(symunit('m')/symunit('s')^sym(2))))/sqrt(sym(40)*(symunit('kg')/symunit('m')))

vel_SI = simplify(vel_SI)
vel_SI = 

-3763tanh(3763t351s"second - a physical unit of time.")20m"meter - a physical unit of length."s"second - a physical unit of time."-((3*sqrt(sym(763))*tanh(((3*sqrt(sym(763))*t)/35)*(1/symunit('s'))))/20)*(symunit('m')/symunit('s'))

有効桁数 3 桁で速度の数値近似を計算します。

digits(3)
vel_SI = vpa(vel_SI)
vel_SI = 

-4.14tanh(2.37t1s"second - a physical unit of time.")m"meter - a physical unit of length."s"second - a physical unit of time."-vpa('4.14')*tanh(vpa('2.37')*t*(1/symunit('s')))*(symunit('m')/symunit('s'))

重力と抗力のバランスが取れるとパラシュート兵の速度は一定に近づきます。これは終端速度と呼ばれ、パラシュートからの抵抗力が重力を相殺する時点で生じます (それ以降は加速なし)。t の極限を得て終端速度を求めます。

vel_term_SI = limit(vel_SI, t, Inf)
vel_term_SI = 

-4.14m"meter - a physical unit of length."s"second - a physical unit of time."-vpa('4.14')*(symunit('m')/symunit('s'))

速度の帝国単位への変換

最後に、速度関数を SI 単位から帝国単位に変換します。

vel_Imperial = rewrite(vel_SI,u.ft)
vel_Imperial = 

-13.6tanh(2.37t1s"second - a physical unit of time.")ft"foot - a physical unit of length."s"second - a physical unit of time."-vpa('13.6')*tanh(vpa('2.37')*t*(1/symunit('s')))*(symunit('ft')/symunit('s'))

終端速度を変換します。

vel_term_Imperial = rewrite(vel_term_SI,u.ft)
vel_term_Imperial = 

-13.6ft"foot - a physical unit of length."s"second - a physical unit of time."-vpa('13.6')*(symunit('ft')/symunit('s'))

時間ごとの速度をプロット

速度を時間の関数としてプロットするには、時間 t を秒単位で表現し、tT で置換します。T は無次元のシンボリック変数です。

syms T
vel_SI = subs(vel_SI, t, T*u.s)
vel_SI = 

-4.14tanh(2.37T)m"meter - a physical unit of length."s"second - a physical unit of time."-vpa('4.14')*tanh(vpa('2.37')*T)*(symunit('m')/symunit('s'))

vel_Imperial = rewrite(vel_SI, u.ft)
vel_Imperial = 

-13.6tanh(2.37T)ft"foot - a physical unit of length."s"second - a physical unit of time."-vpa('13.6')*tanh(vpa('2.37')*T)*(symunit('ft')/symunit('s'))

separateUnits を使用して式を単位から切り離します。fplot を使用して式をプロットします。プロットのラベルとして用いるため、symunit2str を使用して単位を string に変換します。

[data_SI, units_SI] = separateUnits(vel_SI);
[data_Imperial, units_Imperial] = separateUnits(vel_Imperial);

パラシュート兵の速度は t>1 のとき一定に近づきます。範囲 0T2 の速度変化をプロットすることで、速度がどのように終端速度に近づくかを示します。

subplot(1,2,1)
fplot(data_SI,[0 2])
title('Velocity in SI Units')
xlabel('Time in s')
ylabel(['Velocity in ' symunit2str(units_SI)])
subplot(1,2,2)
fplot(data_Imperial,[0 2])
title('Velocity in Imperial Units')
xlabel('Time in s')
ylabel(['Velocity in ' symunit2str(units_Imperial)])