読者です 読者をやめる 読者になる 読者になる

倭算数理研究所

科学・数学・学習関連の記事を、「倭マン日記」とは別に書いていくのだ!

2.6 コーヒーの冷却の問題 : 問題 2.2 より速く冷ますのにミルクを加えるのは先か、それとも後か

今回は問題2.2『より速く冷ますのにミルクを加えるのは先か、それとも後か』です。 現実に役に立つ結果が得られるでしょうかね?。

問題

コーヒーの温度ははじめ90℃だが、コーヒーをおいしく飲むことのできる温度は75℃以下だとしよう。 ミルクを加えるとコーヒーの温度が5℃だけ下がると仮定する。 待ち時間をできるだけ短くしたいとき、最初にミルクを加えそのあと冷めるまで待つのがよいだろうか。 それともコーヒーが80℃まで下がるのを待ってからミルクを加える方がよいだろうか。

シミュレーション・コード

シミュレーションは並行シミュレーションでやります。 また、ミルクを加える前後で冷却定数 r の値は変化しないとしてます*1

@GrabResolver('https://github.com/waman/groops-core/tree/master/repo')
@Grab('org.waman.groops:groops-core:0.1-beta')

import org.waman.groops.builder.SimulationBuilder
import org.waman.groops.simulation.system.*
import java.awt.Color

def dt = 0.01
double T_room = 17.0d

new SimulationBuilder().parallel{

    def pngout = png(fileName:'problem2_2.png', overwrite:true){
        chart(title:'problem 2.2', range:[70.0d, 95.0d]){
            point(label:'before', x:'time', y:'T')
            point(label:'after', x:'time', y:'T')
            marker(label:'75', y:75.0d, color:Color.RED)
            marker(label:'80', y:80.0d, color:Color.BLUE)
        }
    }

    // 先にミルクを入れる場合・・・初期温度は 85℃ で、75℃まで反復
    simulation{
        system(new CoolSystem(), dt:dt, T_room:T_room)
        init(T:85.0d)

        continueWhile{ it.T >= 75.0d }
        console(dataEntries:['time', 'T'], prefix:'[BEFORE] ', outputTiming:FINAL)
        dataOutputter(pngout['before'])
    }

    // 後にミルクを入れる場合・・・初期温度は90℃で、80℃まで反復
    simulation{
        system(new CoolSystem(), dt:dt, T_room:T_room)
        init(T:90.0d)

        continueWhile{ it.T >= 80.0d }
        console(dataEntries:['time', 'T'], prefix:'[AFTER] ', outputTiming:FINAL)
        dataOutputter(pngout['after'])
    }
}.simulate()

class CoolSystem extends AnnotationObservableSystem{

    @State BigDecimal time = 0.0
    @State double T

    @Parameter BigDecimal dt
    @Parameter double T_room
    @Parameter double r = 0.03d
    
    @Override
    void evolve(Map params){
        T += -r * (T - T_room)*dt.doubleValue()
        time += dt
    }
}

実行結果は下図のようになります:


は先にミルクを入れる方で75℃(赤線)に達すれば終了、は後にミルクを入れる方で80℃に達すれば終了です。 それぞれシミュレーションが終了した時間は

ミルクを加えるタイミング 時間
先にミルクを加える場合 5.31
後でミルクを加える場合 4.92

となり、後でミルクを加える方が速く5℃に達することが分かります(冷却定数が同じなら)。 これは、ニュートンの冷却の法則では温度差が大きい方が熱の時間変化が大きいので、最初の熱いうちはこの法則に従って冷却させる方が効率的に冷めるためでしょう。 ちなみに、ミルクを入れた後の冷却定数の値がそれなりに大きくなると、先にミルクを入れた方が速く冷めるようになるようです。

計算物理学入門

計算物理学入門

  • 作者: ハーベイゴールド,ジャントボチニク,Harvey Gould,Jan Tobochnik,鈴木増雄,石川正勝,溜渕継博,宮島佐介
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/12
  • メディア: 単行本
  • 購入: 1人 クリック: 28回
  • この商品を含むブログ (45件) を見る
プログラミングGROOVY

プログラミングGROOVY

*1:r の値を変えてシミュレーションしたい場合はこちらと同様にすればできます。