iconEuler Examples

Cooling down a Pana cotta

by R. Grothmann

This is just a fun application. A Pana cotta (could be any other
pudding) is cooling down. The measurements were

at 0 min : 66°
at 30 min : 53.5°
at 60 min : 44.6°

The measurements are somewhat inaccurate, since the Pana cotta was
stirred, windows were opened etc. However, what is the room
temperature, and when will the Pana cotta have reached 35°?

We use the following model for our cooling.

Panacotta

whera a is the temperature of the room.
>function f(t,a,b,c) := a+exp(b*t-c)
Enter the measurements.
>t=[0,30,60]; T=[66,53.5,44.6];
>plot2d(t,T,points=1); plot2d(t,T,add=1):

Panacotta

Now we want to interpolate the function. We use Nelder-Mead for this.

The following is the error.
>function delta (v) := totalmax(abs(T-f(t,v[1],v[2],v[3])))
It turns out, that we need a good starting point. So we use a guess
for a, the room temperature, and fit b and c according to log(M-a) =
bt-c.
>a=20; M=t'|-1; b=log(T-a)';
>w=fit(M,b); b=w[1], c=w[2]
-0.0104315825592
-3.82725856953
This does not quite interpolate.
>delta([a,b,c])
0.0927776426688
So we apply Nelder-Mead. The room temperature should be 22.5°.
>w=neldermin("delta",[a,b,c]), a=w[1]; b=w[2]; c=w[3];
[ 22.5972222222  -0.011322578919  -3.77052344315 ]
Plot the result.
>plot2d("f(x,a,b,c)",0,240); plot2d(t,T,points=1,add=1):

Panacotta

Solve for the time. After 156 min the Pana cotta should have 30°.
>solve("f(x,a,b,c)",120,y=30)
156.207181302
The true room temperature was about 24°. Let us try to fix that
with another measurement.
>t=t|85; T=T|40.2;
>w=neldermin("delta",[a,b,c]), a=w[1]; b=w[2]; c=w[3];
[ 28.2825350061  -0.0138395538894  -3.63589085014 ]
So we get another room temperature. Probably the method of measurement
should have been more scientific.
>plot2d("f(x,a,b,c)",0,240); plot2d(t,T,points=1,add=1):

Panacotta

The predicted time is very sensitive to these errors, since it
is close to the room temperature.
>solve("f(x,a,b,c)",120,y=30)
223.637373862
After 125 minutes, the predicted temperature is 34.6°.
>f(125,a,b,c)
35.0083063303
In reality, it was 35°. Let us add this to our data.
>t=t|125; T=T|35.0;
>w=neldermin("delta",[a,b,c]), a=w[1]; b=w[2]; c=w[3];
[ 28.4843563658  -0.0139631974264  -3.63019007827 ]
>plot2d("f(x,a,b,c)",0,240); plot2d(t,T,points=1,add=1):

Panacotta

>solve("f(x,a,b,c)",120,y=30)
230.201564176

Examples Homepage