#Worksheet to support Exercise 3.4.11, modeling a cooling potato with an ODE u'(t) = -k*(u(t)-A)^r.

#The data, in time/temperature pairs:
data = [[0, 204], [2, 193], [4, 184], [8, 169], [10, 162], [13, 156], [17, 149], [20, 143], [24, 138], [30, 130]]
N = len(data);

#A plot:
plt1 = scatter_plot(data);
show(plt1)

#We seek to fit a function
A = 72; u0 = 204;
var('t k r');
u(t,k,r) = A + ((u0-A)^(1-r) + k*(r-1)*t)^(1/(1-r));

#A least-squares fuction:
SS = function('SS')(k,r);
SS(k,r) = add((u(data[i][0],k,r)-data[i][1])^2 for i in range(N));

#Now minimize SS(k,r) with respect to k,r. A plot of log(SS) might help
plot3d(log(SS(k,r)),(k,0,0.0004),(r,2,2.5),aspect_ratio=[1000,1,1],adaptive=True)