【发布时间】:2020-06-30 19:00:58
【问题描述】:
我在 Matlab 中有两个嵌套函数。外部使用fminunc,我希望您能帮助我正确地传递一些参数。这是我的代码
clear
rng default
%Some useful parameters
number_starting=10^3;
r=10^5;
J=2;
epsilon_sim=-evrnd(0,1,r,J+1); %rx(J+1)
options = optimoptions(@fminunc, 'MaxFunctionEvaluations', 10^4 ,'MaxIterations', 10^4, 'StepTolerance', 10^(-8), 'Display', 'off');
u_starting=normrnd(0,1,number_starting,J); %rxJ
这是使用fminunc的外部函数
function conv_conjugate=G_star(P, number_starting, options, u_starting,epsilon_sim)
fval=NaN(number_starting,1);
exitflag=NaN(number_starting,1);
for t=1:number_starting
try
coeff=u_starting(t,:).'; %starting values, column vector
[~,fval_temp,exitflag_temp]=fminunc(@obj,coeff, options);
fval(t)=fval_temp;
exitflag(t)=exitflag_temp;
catch
end
end
fval(exitflag>0,:);
conv_conjugate=-min(fval);
end
这是内部函数
function inner=obj(coeff)
comp1=sum(P.*(coeff.'));
comp2=mean(max(epsilon_sim+[coeff.' 0],[],2));
inner=-(comp1-comp2);
end
例如,在这里我尝试在给定的P 处评估外部函数,这显然给了我一个错误,因为某些参数没有正确地通过obj。能给个建议吗?
P_0=[0.7387,0.1562];
G_star(P_0, number_starting, options, u_starting,epsilon_sim);
【问题讨论】:
-
如果它们是嵌套函数,那么内部函数将在外部函数内部定义,并且可以访问其变量。就目前而言,
obj看起来像是一个独立的、独立的函数,它使用未定义的变量。因为您捕获所有错误并忽略它们,所以您可能没有注意到这一点。 -
谢谢。
obj在计算com1时使用P,这是G_star的参数之一。我不知道如何通过P传递obj。
标签: matlab