请问这个最优规划问题计算报的错误什么意思?。

7 次查看(过去 30 天)
hetiv
hetiv 2022-11-24
回答: bagahe 2022-11-24
首先感谢@winner245,根据@winner245的建议,重新修订了函数(下面是修改后的代码),但又遇到了新的问题:
目标函数m文件:
function f = objfun(x)
P0=100;
d=0.0269;
sigma=0.3315;
K=88.254;
T=4.3122;
r=0.0435;
d1=log((P0*exp(-d*T))/(K*exp(-r*T)))/(sigma*sqrt(T))+sigma*sqrt(T)/2;
d2=d1-sigma*sqrt(T);
BS=P0*exp(-d*T)*normpdf(d1)-K*exp(-r*T)*normpdf(d2);
f = x(1)+x(2)*P0+x(3)*BS;
约束条件函数m文件:
function [c, ceq] = confun(x)
% Nonlinear inequality constraints
c = [];
gamma=3;
P0=100;
d=0.0269;
sigma=0.3315;
K=88.254;
T=4.3122;
r=0.0435;
W0=1.1465;
PT=@(u)(P0*exp((r-d-sigma^2/2)*T+u*T^(1/2)*phi));
WT=@(u)((x(1)+W0)*exp(r*T)+x(2)*exp(d*T)*PT+x(3)*max(PT-K,0));
F=@(u)(WT^(1-gamma)*normpdf(u));
if (max(PT-K,0)>0)
I=1;
else
I=0;
end
G=@(u)WT^(-r)*(x(2)*exp(d*T)+x(3)*I)*PT/P0*normpdf(u);
% Nonlinear equality constraints
ceq =[1/(1-gamma)*quad(F,10000,10000),quad(G,10000,10000)];
Command Window:
>> x0 = [1,1,1]; % Make a starting guess at the solution
options = optimset('Algorithm','active-set');
[x,fval,exitflag,output,lambda,grad,hession]=fmincon(@objfun,x0,[],[],[],[],[],[],@confun,options)
结果:
Undefined function 'minus' for input arguments of type 'function_handle'.
Error in confun (line 15)
if (max(PT-K,0)>0)
Error in fmincon (line 681)
[ctmp,ceqtmp] = feval(confcn{3},X,varargin{:});
Caused by:
Failure in initial user-supplied nonlinear constraint function evaluation. FMINCON cannot continue.
新问题:请问下面两句话什么意思:
Undefined function 'minus' for input arguments of type 'function_handle'.
[ctmp,ceqtmp] = feval(confcn{3},X,varargin{:});
还有就是
if (max(PT-K,0)>0)
I=1;
else
I=0;
end
嵌套的位置有点问题,麻烦大伙帮忙想想办法,问题有点多,先谢谢大家!

采纳的回答

bagahe
bagahe 2022-11-24
错误提示已经很清楚了,Attempted to access x(0); index must be a positive integer or logical.
出错语句是:f = x(0)+x(1)*P0+x(2)*BS;
下标索引(非逻辑索引)必须是自然数,即1,2,3 ...
所以,应该是:f = x(1)+x(2)*P0+x(3)*BS;

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 数值类型 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!