It has been predicted that the performance of integrated circuits would double every 18 months. That suggests the time to perform a given computation should halve roughly every 18 months.
What about on Cody? Observational data is available from the final test case of Problem 963 to help us quantify the improvement in performance! And thereby even make predictions for future computations.
Solution Date Runtime [s] ... 144393 04-Oct-12 4.230 ... 654812 17-Apr-15 3.099 ... 1272817 20-Sep-17 2.0402 ...
The complete data set will be provided to you as input. You should assume the general trend can be described by the following law:
runtime = r0 - δ [1 - exp(-t/k)] runtime = r∞ + δ exp(-t/k)
where r0 is the runtime at the start of the period in seconds, r∞ is the predicted runtime (in seconds) that will be approached far in the future, δ = r0 - r∞, and t is the time in nominal years since the start of the period, and k is a kinetic parameter (in nominal years).
The start of the period is defined by the earliest date in the series. Compute the number of days exactly, and assume that a nominal year comprises 365.24 days.
Your task is to fit the curve and thereby predict the runtime for various future dates. Your output should be rounded to four decimal places.
METHOD: You must use fminsearch to perform the non-linear regression, and you must set the options using optimset to ensure sufficient accuracy. The 'best' fit is defined — for this problem, as in the common convention — as that which minimises the sum of the squares of the residuals.
% Input futureDate = '21-Nov-2023'; data.solutionNumber = [1036949, ..., 1272817]; data.date = ['29-Oct-2016'; ...; '20-Sep-2017']; data.runtime = [1.2630, ..., 2.0402]; % Output predictedRuntime = 0.3619; % seconds