我有一个小模型,我用它来估计一个真菌群体在环境条件下的生长。实际上,该模型是以下形式的MATLAB函数:
growth=myfunction(envdata,params)
其中growth
是我的真菌生长多少(呃!),envdata
是一个环境变量矩阵(每个时间步长一行,每列是一个不同的变量,如温度,湿度等等等)和params
是我的模型的参数。后者是我想要优化的那些,它们包括诸如(未知的)初始真菌群体,可以存在一定时间的最大真菌等等,等等。
与此同时,我在实验室测量了一个增长矢量(我的观察结果),我的目标是通过改变输入参数使我的模型适合观察。
我的自然答案是使用诸如fminsearch
之类的东西,但它没有选择使用观察向量作为最低要求。或者我错了吗?
答案 0 :(得分:1)
您希望尽可能接近观察值与模型拟合增长率之间的差异,但正如您所指出的,fminsearch
不允许您使用目标向量。
解决方案是定义一个包装函数,用于定义您尝试最小化的事物(通常称为 loss )。一个流行的损失是均方误差,
MSE(x,y)=Σ(x - y) 2
所以你可以定义,例如,
function loss = objectiveFun(observations, envdata, params)
growth = myfunction(envdata, params);
loss = sum((observation - growth).^2); // or your favorite loss function
end
然后运行
paramsInit = 0; // whatever initial value you have for params
paramsOpt = fminsearch(@(x) objectiveFun(observations, envdata, x), paramsInit);