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

7 Ansichten (letzte 30 Tage)
hetiv
hetiv am 24 Nov. 2022
Beantwortet: bagahe am 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
嵌套的位置有点问题,麻烦大伙帮忙想想办法,问题有点多,先谢谢大家!

Akzeptierte Antwort

bagahe
bagahe am 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;

Weitere Antworten (0)

Kategorien

Mehr zu 数值类型 finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!