Fitting several datasets at once

Several datasets can be fitted simultaneously by concatenating their residual vectors in a user-defined objective function:

def residuals(P):
    values = P.valuesdict()
    r1 = data1 - sim_builder1(values).simulate().intensities()
    r2 = data2 - sim_builder2(values).simulate().intensities()
    return np.concatenate([r1.ravel(), r2.ravel()])

For a full example, see Examples > Fitting > Simultaneous fit.

See the honeycomb fit example, where differential evolution is called with an objective function that has contributions from several reflectometry datasets and models:

    def de_objective(*args):
        ...
        return <sum of squared relative differences>

    result = scipy.optimize.differential_evolution(
        de_objective,
        ...)