Tricks to improve fits

This document contains a list of tricks that can be used to improve the quality of fits. These tricks are not necessary for all fits, but can be useful in some cases.

OCV models (half-cell or full cell)

  • Interpolate the data: some OCP data sets have large gaps between data points (e.g. when collected from GITT). This means that the cost function doesn’t always pick up obviously bad fits. To improve the fit, interpolate the data onto a uniform grid (either in time or capacity), and then fit the model to the interpolated data. This will ensure that the cost function is sensitive to bad fits.

  • Adjust the “dUdQ cutoff” option. This option is used to ignore data points with a large derivative of the OCP, which are typical at the beginning and end of the OCV curves. Adjusting the dUdQ cutoff can have a big impact on the fit quality. The value of the dUdQ cutoff is passed as the “dUdQ cutoff” entry of the options dictionary in the MSMRHalfCell objective:

    options = {"dUdQ cutoff": 0.1, "model":iwp.data_fit.models.MSMRHalfCellModel(electrode)}
    obj = iwp.objectives.MSMRHalfCell(data, options=options)
    

Its value should be at least as big as the dUdQ peaks in the middle of the dataset.

  • Adjust the variable weights in the cost to weight the differential voltage more heavily:

    iwp.costs.RMSE(
        variable_weights={
            "Capacity [A.h]": 1,
            "Differential voltage [V/Ah]": 5,
        }
    )
    
  • Use different optimizers. Some optimizers to try are:

    • iwp.optimizers.DifferentialEvolution()

    • iwp.optimizers.ScipyShgo()

    • iwp.optimizers.ScipyMinimize(method="Nelder-Mead")

Current-driven fits

  • Switch the independent variable to “voltage” instead of “time”.