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

7 views (last 30 days)
hetiv
hetiv on 24 Nov 2022
Answered: bagahe on 24 Nov 2022
首先感谢@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
嵌套的位置有点问题,麻烦大伙帮忙想想办法,问题有点多,先谢谢大家!

Accepted Answer

bagahe
bagahe on 24 Nov 2022
错误提示已经很清楚了,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;

More Answers (0)

Categories

Find more on 数值类型 in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!