正如其他人所观察到的,您的函数需要返回具有输入数据形状的内容,因此您需要更改错误函数的输出形状。由于scipy执行一个最小二乘函数,所以这是通过使函数返回np.sqrt(val1 ** 2 + val2 ** 2)来实现的。在
但是,对于这类问题,我更喜欢使用我编写的scipy的包装器,以简化处理多个组件的过程,称为^{}。在
在symfit中,这个示例问题将按如下方式解决:from symfit import parameters, variables, log, Fit, Model
import numpy as np
import matplotlib.pyplot as plt
x, y, z1, z2 = variables('x, y, z1, z2')
a, b, c = parameters('a, b, c')
z1_component = log(a) + b * log(x) + c * log(y)
model_dict = {
z1: z1_component,
z2: log(a) - 4 * z1_component/3
}
model = Model(model_dict)
print(model)
# Make example data
xdata = np.linspace(0.1, 1.1, 101)
ydata = np.linspace(1.0, 2.0, 101)
z1data, z2data = model(x=xdata, y=ydata, a=10., b=