0

我有一个小模型,我用它来估计环境条件下真菌种群的生长。该模型实际上是以下形式的 MATLAB 函数:

growth=myfunction(envdata,params)

growth我的真菌生长量在哪里(呃!),envdata是一个环境变量矩阵(每个时间步长一行,每列是一个不同的变量,例如温度、湿度等等等),并且params是我的模型的参数. 后者是我想要优化的那些,它们包括诸如(未知的)初始真菌种群、可以在某个时间存在的最大真菌等等之类的东西。

同时,我有一个在实验室中测量的增长向量(我的观察结果),我现在的目标是通过改变输入参数来使我的模型适应观察结果。

我的自然答案是使用诸如 之类的东西fminsearch,但它没有选择至少使用观察向量。还是我错了?

4

1 回答 1

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);
于 2016-04-21T10:45:11.467 回答