python-3.x - 在最小化函数中嵌入最小化拟合,参数不变
问题描述
我尝试用多指数函数拟合 3d 矩阵,如
S(w1,w2,T) = sum( A_i(w1,w2)*exp(-T/tau_i) )
为了减少拟合时间,我将其分为两个步骤。
仅以寿命 (tau_i) 作为参数定义目标函数,同时在目标函数中嵌入最小化拟合,如代码所示。
问题是“当我最小化目标函数时,参数不会改变?”
#data, is 3d matrix, data[k,i,j]
ltn = 4
#build the amplifer fitting model
def fit_2ddas_amp(params, dat, dec):
model_amp = np.zeros(len(waitT),np.float)
for k in range(ltn):
model_amp = model_amp + params['amp_%i'%(k)] * np.exp(-waitT/dec[k])
resid_amp = dat - model_amp
return resid_amp
#build the decay time fitting model
def fit_2ddas_decay(par_decay):
decay_fit = np.zeros(ltn,np.float)
for i in range(ltn):
decay_fit[i] = par_decay['decay_%i'%(i)]
print('Decay', str(i+1), ':', '%.6f'%(decay_fit[i]), 'ps' )
resid = np.zeros_like(data)
#do the amplifier fitting
for i in range(len(wt)):
for j in range(len(wtau)):
#create initial value of amplifier
par_amp = Parameters()
for k in range(ltn):
par_amp.add('amp_%i'%(k), value = 2 )
#do the amplifer fit
minner_amp = Minimizer(fit_2ddas_amp, par_amp, fcn_args=(data[:,i,j], decay_fit), nan_policy='propagate')
result_amp = minner_amp.minimize(method='least_squares')
resid[:,i,j] = result_amp.residual
return resid.flatten()
#create parameters of decay
par_2ddas_decay = Parameters()
for i in range(ltn):
par_2ddas_decay.add('decay_%i'%(i), value = 2, min = 0.0)
#do the decay time fit
minner_decay = Minimizer(fit_2ddas_decay, par_2ddas_decay, nan_policy='propagate')
result_decay = minner_decay.minimize()
the decay time always the same.
Decay 1 : 2.000000 ps
Decay 2 : 2.000000 ps
Decay 3 : 2.000000 ps
Decay 4 : 2.000000 ps
Decay 1 : 2.000000 ps
Decay 2 : 2.000000 ps
Decay 3 : 2.000000 ps
Decay 4 : 2.000000 ps
Decay 1 : 2.000000 ps
Decay 2 : 2.000000 ps
Decay 3 : 2.000000 ps
Decay 4 : 2.000000 ps
解决方案
好吧,您真正展示的是decay
参数不会更改为 6 位有效数字。完成拟合后,首先将参数值更改很小的量(如 1.e-7)以生成偏导数或雅可比矩阵。因此,打印出“仅”六位数字可能不会显示所做的更改。
您没有提供完整的脚本或完整的输出。在不知道data
(和其他变量)是什么的情况下,很难猜测会发生什么。
在 fit 函数本身内len(wt)*len(wtau)
进行多次拟合(不管是什么)当然很奇怪,但也许这实际上是你想要做的——我不知道你想要完成什么。
推荐阅读
- javascript - Javascript 理解 Promise
- flutter - 如何更改 TabBar - Flutter 中每个 Tab 的突出显示颜色、初始颜色和大小?
- xml - 如何在 Powershell 中获取特定的 XML 节点
- docker - Docker 切换回 wsl 2
- image - C# EmguCV 调整垫子大小但保持边界/分辨率
- javascript - 如何使用 JavaScript 完全重置/清除 ASP.NET Core MVC 表单?
- javascript - Angular - LeaderLine 不显示线
- reactjs - React.useContext 和 Minified React 错误 #321;
- swift - “您的浏览器不支持全屏” - WKWebview,macOS
- spring-boot - 在部署的应用程序中为 Spring Boot 提供 Freemarker 资源文件夹