育児 物理学 熱力学 伝熱工学 数学 微分方程式
調乳ヘルパーの計算式解説① はじめに
先日,調乳の際に「熱湯と湯冷ましをどれくらいの比率で混ぜればいいか」を計算する調乳ヘルパー というツールを作ってこのサイト内で公開しました。うちが実際このやり方で調乳しているんですが,子どもの成長に合わせて作る量が頻繁に変わる中で,丁度いい配分を毎回勘で探すのが面倒だったのと,既存のアプリが見当たらなかったので,お得意のバイブコーディングで作ってみました。
Claude Codeに要件を伝えてモノ自体はすぐに出来たんですが,自分以外の人が使う時に計算の根拠をちゃんと説明できないと信頼してもらえないだろうと思うので,物理苦手な文系エンジニアではありますが,AIの成果物を解説する記事を書いてみようと思います。(と言いつつこの記事もClaudeに下書きさせてるんですが)
熱平衡とは
温度の違うものを混ぜると,最終的にどこかの温度で釣り合います。これが熱平衡です。理科の授業で「熱いお湯と冷たい水を混ぜたら最終的に何度になるか」みたいな問題をやった記憶がある人もいるんじゃないでしょうか。
この過程で熱として移動したエネルギーの量を熱量(単位は J: ジュール)と言い,このとき成り立つのが熱量保存則というルールです。初期状態から熱平衡に至るまでの間で,エネルギーは勝手に増えたり消えたりせず,高温側が失った熱量と低温側が得た熱量は等しくなるっていうやつです。
熱量そのものは,次の式で計算できます。
Q = m c Δ T Q = mc\Delta T Q = m c Δ T
Q Q Q :熱量
m m m :質量
c c c :比熱
Δ T \Delta T Δ T :温度差
比熱とは,「その物質1gの温度を1℃上げるのに必要な熱量」のことです。水は比熱が大きい,つまり温まりにくく冷めにくい方の物質で,「お風呂は沸かすのに時間がかかるけど冷めにくい」みたいな体感にもつながっています。
調乳ヘルパーにおける水の配分の計算は,この「高温側が失う熱量=低温側が得る熱量」という式を立てて,知りたい変数(お湯の量)について解く形を取っています。
調乳ヘルパーの計算式
お湯と湯冷ましの温度と量だけで計算する方式です。各記号を
V V V :出来上がり量
V h V_h V h :お湯の量
V c V_c V c :湯冷ましの量
T h T_h T h :お湯の温度
T c T_c T c :湯冷ましの温度
T g T_g T g :目標温度
c c c :比熱
と置くと,V c = V − V h V _ c = V - V _ h V c = V − V h なので,以下のように熱収支式から c c c と V c V_c V c を削除することで,出来上がり量とそれぞれの温度から熱湯の量を求めることが出来ます。
V h c ( T h − T g ) = V c c ( T g − T c ) (熱量保存則)...① V h ( T h − T g ) = ( V − V h ) ( T g − T c ) (①を両辺 c で割って V c に V − V h を代入)...② V h = V ( T g − T c ) T h − T c ( ②を V h について解いて)...③ \begin{aligned}
V_h \, c \, (T_h - T_g) &= V_c \, c \, (T_g - T_c) &\text{(熱量保存則)...①}\\\\
V_h (T_h - T_g) &= (V - V_h)(T_g - T_c) &\text{(①を両辺 } c \text{ で割って} V_c \text{ に} V - V_h \text{ を代入)...②} \\\\
V_h &= \frac{V (T_g - T_c)}{T_h - T_c} &\text{( ②を}V_h\text{ について解いて)...③}
\end{aligned} V h c ( T h − T g ) V h ( T h − T g ) V h = V c c ( T g − T c ) = ( V − V h ) ( T g − T c ) = T h − T c V ( T g − T c ) (熱量保存則) ...① ( ① を両辺 c で割って V c に V − V h を代入) ...② ( ② を V h について解いて) ...③
粉ミルクや哺乳瓶の熱容量は考慮していないので,あくまで熱湯と湯冷ましの混合温度としての計算です。
追加で冷やす時間の目安
単純にお湯と水を混ぜて目標の温度にするってだけならこれで十分なんですが,粉ミルクの場合,メーカーによっては「熱湯は出来上がり量の1/2以上」のような規定があり,それを満たそうとするとどれだけ水を冷たくしても目標温度まで下げきれないことがあります。
そういった場合のために,流水や氷水でさらに冷やす時間の目安を,ニュートンの冷却法則の近似式を使って出しています。
ニュートンの冷却法則
ニュートンの冷却法則とは,物体の温度変化の速さは,その物体と周囲との温度差に比例するという法則です。要は,「氷を熱湯に入れた時と水に入れた時じゃ,熱湯に入れた時の方が速く溶けるよね」という当たり前の感覚を法則として切り出してみたよって感じですね。
これを数学的に表現すると,物体から周囲へ移動する単位時間あたりの熱量(=冷却速度)について,
d Q d t = h A ( T − T w ) ④ \frac{dQ}{dt} = hA(T - T_w) \tag*{④} d t d Q = h A ( T − T w ) ④
という式が立ちます。記号の意味は以下の通りです。
Q Q Q :物体から周囲へ移動した熱量
t t t :冷却を開始してからの時間
h h h :熱伝達率 [ W / ( m 2 ⋅ K ) ] \mathrm{[W/(m^2 \cdot K)]} [ W/ ( m 2 ⋅ K )]
A A A :熱が移動する表面積 [ m 2 ] \mathrm{[m^2]} [ m 2 ]
T T T :冷却される物体の温度
T w T_w T w :周囲(今回は流水や氷水)の温度
Q を t についての関数と考えると,冷却速度 = Q の変化量なので,左辺は微分の形になってるんですね。で,それが T − T w T - T_w T − T w に比例してるよっていう関係性を表していることがわかります。ちなみに T w T_w T w は資料によって T s T_s T s だったり T m T_m T m だったりして特に決まった書き方がなさそうだったので,この記事ではこの後の式で使う T w T_w T w で書いてます。
また,物体が熱を失うことによる温度変化は,物体の質量を m [ k g ] m \mathrm{[kg]} m [ kg ] ,比熱を c [ J / ( k g ⋅ K ) ] c\,\mathrm{[J/(kg \cdot K)]} c [ J/ ( kg ⋅ K )] とすると,
d Q = − m c d T ⑤ dQ = -mc\,dT \tag*{⑤} d Q = − m c d T ⑤
と表せます。 一般的な熱量の式である Q = m c Δ T Q = mc \Delta T Q = m c Δ T を T T T について微分した形ですね。熱を失う変化なのでマイナスを付けています。
この ⑤ を ④ に代入して式変形すると,
d T d t = − h A m c ( T − T w ) \frac{dT}{dt} = -\frac{hA}{mc}(T-T_w) d t d T = − m c h A ( T − T w )
が得られます。 ここで,
k = h A m c ⑥ k = \frac{hA}{mc} \tag*{⑥} k = m c h A ⑥
と置くと,
d T d t = − k ( T − T w ) ⑦ \frac{dT}{dt}=-k(T-T_w) \tag*{⑦} d t d T = − k ( T − T w ) ⑦
となります。この k k k を冷却係数と呼びます。熱伝達率や表面積,物体の質量,比熱といった要素をまとめた,「その物体がその環境でどれくらい冷えやすいか」を表す値です。k k k の単位は,式 ⑥ と構成要素の単位から,
k = W / ( m 2 ⋅ K ) ⋅ m 2 k g ⋅ J / ( k g ⋅ K ) = W m 2 ⋅ K ⋅ m 2 ⋅ 1 k g ⋅ k g ⋅ K J = W J \begin{aligned}
k &= \frac{ \mathrm{W/(m^2 \cdot K)} \cdot \mathrm{m^2} }{ \mathrm{kg} \cdot \mathrm{J/(kg \cdot K)} } \\\\[4pt]
&= \frac{\mathrm{W}}{\mathrm{m^2 \cdot K}} \cdot \mathrm{m^2} \cdot \frac{1}{\mathrm{kg}} \cdot \frac{\mathrm{kg \cdot K}}{\mathrm{J}} \\\\[4pt]
&= \frac{\mathrm{W}}{\mathrm{J}} \\[4pt]
\end{aligned} k = kg ⋅ J/ ( kg ⋅ K ) W/ ( m 2 ⋅ K ) ⋅ m 2 = m 2 ⋅ K W ⋅ m 2 ⋅ kg 1 ⋅ J kg ⋅ K = J W
となります。1 W = 1 J / s 1\,\mathrm{W}=1\,\mathrm{J/s} 1 W = 1 J/s (仕事率=時間あたりの仕事量)なので,
[ k ] = J / s J = s − 1 [k] = \frac{\mathrm{J/s}}{\mathrm{J}} = \mathrm{s^{-1}} [ k ] = J J/s = s − 1
となり,k k k は時間の逆数の次元を持つことがわかります。
微分方程式の変数分離形
さて,式 ⑦ はこのままでは実務で使うには扱いづらいので,微分方程式を解いていくんですが,これは変数分離形というお決まりの解き方があるらしいです。
つまり,
d y d x = p ( x ) q ( y ) ⑧ \frac{dy}{dx} = p(x)q(y) \tag*{⑧} d x d y = p ( x ) q ( y ) ⑧
という形の微分方程式があったら,
1 q ( y ) d y d x = p ( x ) ⑨ \frac{1}{q(y)} \frac{dy}{dx} = p(x) \tag*{⑨} q ( y ) 1 d x d y = p ( x ) ⑨
と変形してから両辺を x x x について積分すると,
∫ 1 q ( y ) d y d x d x = ∫ p ( x ) d x \int\frac{1}{q(y)} \frac{dy}{dx} dx = \int p(x) dx ∫ q ( y ) 1 d x d y d x = ∫ p ( x ) d x
となり,左辺に置換積分の公式を適用すると
∫ 1 q ( y ) d y = ∫ p ( x ) d x \int\frac{1}{q(y)} dy = \int p(x) dx ∫ q ( y ) 1 d y = ∫ p ( x ) d x
となります。
d y d x d x \frac{dy}{dx} dx d x d y d x
部分の処理については,
d y d x ⏟ x の微小変化に対する y の変化率 × d x ⏟ x の微小変化 = d y ⏟ y の微小変化 \underbrace{\frac{dy}{dx}}_{\text{$x$ の微小変化に対する$y$の変化率}} \times \underbrace{dx}_{\text{$x$ の微小変化}} = \underbrace{dy}_{\text{$y$ の微小変化}} x の微小変化に対する y の変化率 d x d y × x の微小変化 d x = y の微小変化 d y
だと理解しました。積分は文系にはこれが限界です。ともかく,これで左辺も普通に y y y で積分すれば良くなるので,楽に解けるねということらしいです。いやー微積分って改めてちゃんと考えるとムズいっすね……
冷却法則の微分方程式を解く
はい,だいぶ脱線しましたが,やっとこさ ⑦ を解いていきます。念のため ⑦ を再掲しますと,
d T d t = − k ( T − T w ) ⑦ \frac{dT}{dt}=-k(T-T_w) \tag*{⑦} d t d T = − k ( T − T w ) ⑦
はい,この形ですね。一見すると右辺に t t t の関数が見当たらないので,⑧ とは別物に見えるんですが,右辺には p ( t ) = − k p(t) = -k p ( t ) = − k という t t t の関数が隠れていると見なして無理やり(?)解くのが定石らしいです。柄が悪いですね。なので,⑨と同じように T T T の関数 T − T w T - T_w T − T w で両辺を割ります。
1 T − T w d T d t = − k d t \frac{1}{T-T_w}\frac{dT}{dt}=-k\,dt T − T w 1 d t d T = − k d t
両辺を t t t について積分して置換積分の公式を適用すると,
∫ 1 T − T w d T = ∫ − k d t \int\frac{1}{T-T_w}\,dT = \int-k\,dt ∫ T − T w 1 d T = ∫ − k d t
となります。 これを積分すると,
ln ∣ T − T w ∣ = − k t + C \ln|T-T_w|=-kt+C ln ∣ T − T w ∣ = − k t + C
となります(C C C は積分定数)。ln は自然対数なので,ちゃんと書くと log e ∣ T − T w ∣ \log_e |T - T_w| log e ∣ T − T w ∣ ですね。 両辺の e e e についての指数関数を取ると,
e ln ∣ T − T w ∣ = e − k t + C ∣ T − T w ∣ = e − k t + C (logの定義より) = e C e − k t ⑩ \begin{aligned}
e^{\ln|T-T_w|} &= e^{-kt+C} \\\\
|T-T_w| &= e^{-kt+C} &\text{(logの定義より)} \\\\
&= e^C e^{-kt} &\text{⑩}
\end{aligned} e l n ∣ T − T w ∣ ∣ T − T w ∣ = e − k t + C = e − k t + C = e C e − k t (log の定義より ) ⑩
となります。左辺については,そもそも ln ∣ T − T w ∣ \ln|T-T_w| ln ∣ T − T w ∣ が「e e e を何乗したら ∣ T − T w ∣ |T-T_w| ∣ T − T w ∣ になるか」を表しているので,それを e e e の指数にしたら必然的に ∣ T − T w ∣ |T-T_w| ∣ T − T w ∣ になるってことです。
冷却中は T > T w T>T_w T > T w と考えられるため絶対値を外し,e C e^C e C を新たな定数 A A A と置くと,
T − T w = A e − k t ⑪ T-T_w=Ae^{-kt} \tag*{⑪} T − T w = A e − k t ⑪
となります。 ここで,冷却を開始した時刻を t = 0 t=0 t = 0 ,そのときの温度を T s T_s T s として式⑩に代入すると,
T s − T w = A e − k ⋅ 0 = A T_s-T_w = Ae^{-k\cdot0} = A T s − T w = A e − k ⋅ 0 = A
となるため,
A = T s − T w A=T_s-T_w A = T s − T w
です。これを⑪に代入すると
T ( t ) − T w = ( T s − T w ) e − k t ⑫ T(t)-T_w=(T_s-T_w)e^{-kt} \tag*{⑫} T ( t ) − T w = ( T s − T w ) e − k t ⑫
となります(T T T が t t t の関数であることを明示しています)。つまり,周囲との温度差が時間とともに指数関数的に小さくなっていくことを表しています。
冷却完了までの時間を求める
ここで,冷却係数 k k k の逆数を
τ = 1 k \tau = \frac{1}{k} τ = k 1
と置き,時定数 τ \tau τ とします。k k k が時間の逆数で冷却の速度を表すため,その逆数 τ \tau τ は冷却に掛かる時間を表すわけ値になるわけです。時間 = 距離 ÷ 速さ 時間 = 距離 \div 速さ 時間 = 距離 ÷ 速さ 的な話ですね。「ミルクの冷却速度」より「ミルクを冷ますのに掛かる時間」の方が参考値を入手しやすいだろうという目論見で k k k の代わりに τ \tau τ を採用しているんだと思います(他人事)。これを⑫に代入すると
T ( t ) − T w = ( T s − T w ) e − t / τ T(t) - T_w = (T_s - T_w)e^{-t/\tau} T ( t ) − T w = ( T s − T w ) e − t / τ
となります。今知りたいのは「目標の温度にするためには何分冷却すれば良いのか」なので,目標温度 T g T_g T g に達した時刻を t ′ t' t ′ とすると,
T ( t ′ ) = T g T(t') = T_g T ( t ′ ) = T g
から,
T g − T w = ( T s − T w ) e − t ′ / τ T_g - T_w = (T_s - T_w)e^{-t'/\tau} T g − T w = ( T s − T w ) e − t ′ / τ
と書けます。これを今度は t ′ t' t ′ について解いていきます。まず両辺を ( T s − T w ) (T_s - T_w) ( T s − T w ) で割って,
T g − T w T s − T w = e − t ′ / τ \frac{T_g - T_w}{T_s - T_w} = e^{-t'/\tau} T s − T w T g − T w = e − t ′ / τ
両辺の自然対数 ln \ln ln を取ると,
ln ( T g − T w T s − T w ) = − t ′ τ \ln\left( \frac{T_g - T_w}{T_s - T_w} \right) = -\frac{t'}{\tau} ln ( T s − T w T g − T w ) = − τ t ′
となります。これで t ′ t' t ′ が単体で取り出せました。両辺に − τ -\tau − τ を掛けて移項すると,
t ′ = − τ ln ( T g − T w T s − T w ) t' = -\tau \ln\left( \frac{T_g - T_w}{T_s - T_w} \right) t ′ = − τ ln ( T s − T w T g − T w )
となり,t ′ t' t ′ について解くことが出来ました。マイナスが邪魔なので,
− ln x = ln ( 1 x ) -\ln x = \ln\left(\frac{1}{x}\right) − ln x = ln ( x 1 )
という対数の定義を使えば
t ′ = τ ln ( T s − T w T g − T w ) t' = \tau \ln\left( \frac{T_s - T_w}{T_g - T_w} \right) t ′ = τ ln ( T g − T w T s − T w )
と変形できます。
τ \tau τ (時定数)の値については,英国食品基準庁(FSA)の実験報告書などの実測データから回帰した V V V (出来上がり量)についての関数を使っています。流水に晒す場合,氷水に浸す場合のそれぞれについて,τ \tau τ は以下の通りです。
τ 流水 ( V ) ≈ 0.269 × V 0.469 , τ 氷水 ( V ) ≈ 0.512 × V 0.469 \tau_{\text{流水}}(V) \approx 0.269 \times V^{0.469}, \qquad \tau_{\text{氷水}}(V) \approx 0.512 \times V^{0.469} τ 流水 ( V ) ≈ 0.269 × V 0.469 , τ 氷水 ( V ) ≈ 0.512 × V 0.469
検証の詳細については,長くなりそうなので別に記事を立てて説明しようと思います。
ちなみに,水道水の温度は季節で変わるので,東京都水道局が公表している月別の平均水温データを使い,現在の月に応じて自動で切り替えています。
まとめ
というわけで,調乳ヘルパーで使われている計算式の解説でした。「理解していないことは書かない」というスタンスを取ったことによってかなり長くなってしまいましたが,みなさんの理解のお役に立てれば幸いです。依然物理学(冷却とかの話は特に「伝熱工学」というらしいです。はえ~)への苦手意識は克服できないですが,この記事を通してLaTeXがちょっと書けるようになったのは収穫だったかなと思いました。それでは。