Supplemental material to: Anderson, K.B and J.A.Conder, Discussion of Multicyclic Hubbert modeling as a method for forecasting future petroleum production, Energy and Fuels, 2011


A supplemental Matlab function “fit_multicycle” is included with the manuscript “Discussion of Multicyclic Hubbert modeling as a method for forecasting future petroleum production”, by Anderson and Conder. This function fits a production time series to a desired number of Hubbert cycles (derivatives of logistic curves). The function was written in Matlab ver. R2010b (Mac). The “.txt” extension is for ease of distribution and should be removed for use.


>> [Ppred params rmse] = fit_multicycle(time,prod,nk,nseeds)

The function requires four inputs: time, prod, nk, nseeds. prod and time are vectors of production and associated time stamps. nk is the number of desired curves. nseeds is the number of random seed trials. The greater number of trials, the more likely the program will find a global minimum, but at the expense of time. More curves will generally require a non-linearly increasing number of seeds.

Three outputs are returned: 1) Ppred: predicted production having the same number of data as actual production. Predicted production is the sum of the curves. 2) params: nk x 3 matrix containing the best fitting parameters, tmax (col.1), pmax (col.2), and a (col.3), for each curve. 3) rmse: root mean square error for the model production curve relative to the actual production.

Note: It is not only possible but, quite likely for physically unrealistic parameters (e.g., negative production) to arise when asking for more curves than the data warrant.

For a quick comparison of actual and model production:

>> plot(time,prod,time,Ppre)

Caveat emptor. James Conder