在MatLab中使用矢量作为fminsearch中的输入



我正在努力理解以下代码是如何优化目标函数的。

我想,如果我使用向量作为fminsearch的输入,如下所示,结果"Kp"应该会给我目标函数最小化的点。

例如,Kp[1]应该给我一个点,在这个点上,对于给定的K[1]和Z[1],目标函数是最小化的。所以它只是求解一元函数。

但如果我有如下的目标函数。Kp[4]也应该影响Kp[1],因为函数内部有flipud(Vs(,反之亦然。

fminsearch仍然给了我结果,没有显示任何错误信息。

如果是这样的话,fminsearch到底能最小化什么?对于给定的K[1]和Z[1],Kp[1]是否仍然最小化目标函数?

在没有flipud(Vs(的情况下,fminsearch是否将其视为多变量优化问题,而不是单变量优化问题?

如果是这样的话,fminsearch如何最小化目标函数,因为在这种情况下有不止一个方程要最小化?

clear
clc
R         = 1.008;
sig       = 0.75;
tempkgrid = linspace(-2,6,2)';
K = [tempkgrid ; tempkgrid];
Z = [2*ones(2,1);4*ones(2,1)];
aconst1      = -2*ones(4,1);
aconst2      = 6*ones(4,1);
const = R * (K + Z);
obj         = @(Vs) -((1/(1-1/sig)) * ((Z + K - Vs./R) > 0) .* (Z + K - Vs./R).^(1-1/sig) + flipud(Vs));
Kp          = fminsearchbnd(@(c) norm(obj(c)) ,aconst1, aconst1, const);

当输入是向量时,fminsearch解决了多变量最小化问题。换句话说,它最小化了一个多变量函数,例如

f(x1,x2,x3,…(

不是同时最小化多个单变量函数

f(x1,x2=x2_0,x3=x3_0,…(,

f(x1=x1_0,x2,x3=x3_0,…(,

f(x1=x1_0,x2=x2_0,x3,…(,…

为了了解它是如何在N维空间中找到局部极小值的,它有助于理解梯度下降法的思想。尽管fminsearch使用了不同的算法(Nelder-Mead方法(,但所有最小化方法背后的基本思想是相似的。

它的wiki页面提供了一个很好的梯度下降方法:

一个困在山上的人正试图下山(即试图找到全局最小值(。

雾很大,所以看不见下山的路;他们必须使用本地信息来找到最小值。

他们可以使用梯度下降法
查看当前位置的山丘陡峭程度,然后朝着最陡的下降方向前进(即下坡(。

使用这种方法,他们最终会找到下山的路,或者可能陷入某种"困境";"洞";(即局部最小值或鞍点(,就像一个山湖。

fminsearch使用Nelder-Mead单纯形算法,您可以在matlab的参考页面或其wiki页面上查看它。

相关内容

  • 没有找到相关文章

最新更新