我在使用Scipy的Curve_fit函数时遇到问题,想知道是否有人知道我能对此做些什么。我正在进行仿真,并且想找到一种方法来优化其参数以适应“真实”测试图像。
Band = Simulation(fname, other_params)
在这里,Band是一个类类型变量,可帮助我运行模拟。以下函数是实际模拟的包装器,本质上重要的是它返回一个1d数组,该数组只是一个平坦的图像。
def wrapper(xy, X_off, Y_off):
Image = Band.weight(201,757,5000,5000, fill_length=7, offset_X = X_off, offset_Y = Y_off, rand_tup=(300,0,2000))
print X_off, Y_off
return Image.flatten()
下面,我为X_off,Y_off(X / Y偏移,其中X和Y是基于卫星位置的准笛卡尔网格)设置了一些初始参数。我还导入了一个“真实”图像,该图像将用作我的因变量-本质上,我是在要求该程序吐出最佳参数,以便模拟将产生与该“真实”图像最接近的图像。
p0 = [-14,4]
Real_image = Band.Im[some_range]
注意,我在包装函数中定义了“ xy”。这实际上是没有用的,只是在那里,所以我可以说我有一个自变量-实际上我没有!该模拟实际上没有自变量,但是我仍然想找到一种优化它的方法,并认为这会起作用。
xy = np.zeros(10)
optimal_params, covariance = curve_fit(wrapper, xy, F1_portion.flatten(), p0)
最后一行的结果始终是,optimize_params与初始猜测p0极为相似,可能相差很小。通过仔细研究,该算法似乎根本不会改变参数。我希望它至少以整数步长来更改参数,而且我不确定如何才能做到这一点。
基本上,我几乎总是将我的初始参数返回给我。这是算法还是我的代码有问题?我可以使用另一种算法来找到最佳参数吗?
谢谢