function cool_off (initial_temp, timestep, end_time) % % Compute the temperature of an object as a function of time. % The object begins at a temperature of "initial_temp" % and cools toward an ultimate temperature of absolute zero. % Keep going until we reach the time "end_time." % % We use Newton's law of cooling. % % dT / dt = - k*T % % where "k" is the coefficient of cooling, and is % equal to the reciprocal of the time constant. % We set the time constant in the program's initialization % stage. The calculations employ Euler's method. % % The program prints to the screen one line per timestep, giving % the time (in seconds) and the temperature (in Kelvin), like this: % % t 91.000 temp 23.328 % % % Usage: cool_off (initial_temp, timestep, end_time) % % where % initial_temp is starting temperature of the % object (Kelvin) % % timestep is the timestep to use in the integration % (seconds) % % end_time is the point at which we stop the % calculations (seconds) % % % MWR 11/29/2011 % set this to 1 to see diagnostic messages debug = 0; % the temperature of the object (Kelvin) temp = initial_temp; % the timestep for integration (seconds) dt = timestep; % time since the object started cooling (seconds) t = 0; % time constant for cooling (seconds) time_constant = 10.0; if (debug > 0) fprintf(1, 'initial_temp is %f \n', initial_temp); fprintf(1, 'timestep is %f \n', timestep); fprintf(1, 'end_time is %f \n', end_time); end while (t <= end_time) fprintf(1, 't %9.3f temp %9.3f \n', t, temp); % how much will the object cool during this coming timestep? dtemp = - (1.0 / time_constant) * temp; if (debug > 0) fprintf(1, ' dT %9.3f \n', dtemp); end % use Euler's method to compute the new temperature new_temp = temp + dtemp; % update variables for the next iteration temp = new_temp; t = t + dt; end