#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)