Matlab中fminsearch传入向量输入的优化逻辑问题咨询
问题解答
1. fminsearch实际优化目标、Kp[1]的属性
你调用fminsearchbnd时传入的目标函数是@(c) norm(obj(c)),其中obj(c)返回长度为4的列向量,norm默认计算L2范数,因此实际优化的目标是obj输出向量的L2范数的最小值。
由于目标函数中存在flipud(Vs)操作,输入向量Vs的4个元素完全耦合:Vs[4]会参与obj[1]的计算,Vs[1]会参与obj[4]的计算,因此Kp[1]不是给定K[1]、Z[1]时单变量优化的结果,它是和另外3个变量共同调整后,让整体范数最小的取值。
2. 是否属于多变量优化问题
是。fminsearch系列求解器只要接收的初始点为向量,就会按照多变量优化问题处理,更何况你当前场景下变量之间存在显式耦合,本质就是4维输入的多变量优化,完全不是4个独立的单变量优化任务。
3. 多输出场景下的最小化逻辑
fminsearch本身仅支持标量目标函数的最小化,你代码中通过norm(obj(c))已经把多输出的obj转换成了单值标量目标,不存在多个待最小化的方程。如果直接传入多输出的目标函数给fminsearch会直接报错。
你当前的写法等价于把4个输出项的平方和开根号作为唯一的最小化目标,求解器会通过Nelder-Mead单纯形算法不断调整4个输入变量的取值,直到找到让这个标量范数最小的可行解。
你提供的参考代码如下:
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);
内容的提问来源于stack exchange,提问作者Chang
相关产品推荐
相关产品推荐

