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,
...)