matlab fitmodel,matlab做copula,运行fitmodel老出错。回复赠论坛币!

RT:matlab做copula,运行fitmodel老出错。

老是提示:

??? Input argument "solver" is undefined.

Error in ==> fitModel at 39

switch solver

fitmodel代码如下:

if nargin == 2

solver = 'fmincon';

end

switch solver

case 'fmincon'

% create starting values

if isfield(spec,'comment')==1

theta0 = spec.ctheta0;

else

theta0 = InputStartingValues(spec);

end

pause(.1);

% create constraints + bounds matrices for fmincon

[A, B, lower, upper] = CreateFminconConstraints(spec);

%define optimization specifications

options = optimset('Algorithm','interior-point','Display','iter','Hessian','bfgs','MaxFunEvals',12000);

options = optimset(options,'FinDiffType','central','MaxIter',1500,'TolCon',10^-12,'TolFun',10^-5,'TolX',10^-5);

case 'fminunc'

%define optimization specifications

options = optimset('Algorithm','interior-point','Display','iter','MaxFunEvals',9000,'MaxIter',1000,'TolCon',10^-12,'TolFun',10^-4,'TolX',10^-5,'FinDiffType','central');

% invoke optimization procedure

end

purp = spec.purpose;

switch purp

case 'fitGARCH'

T = size(data,1); n = spec.size; m = spec.vecsize;

parameters=zeros(m,n);

LogL = zeros(1,n);

exitflag = zeros(1,n);

evalmodel = cell(1,n);

GradHess = cell(1,n);

udata = zeros(size(data));

for i=1:n

tic;

if strcmp(solver,'fmincon')==1

[parameters(:,i), LogL(i),exitflag(i),output,lambda,grad,hessian]= fmincon('GARCHLogL',theta0,A,B,[],[],lower,upper,[],options,data(:,i),spec,solver);

yz = menu('calculate asymptotic standard errors?','yes','no');

pause(.1)

if yz == 1

[derivatives, RobVCV, VCV, hessian, RobStE]=CalcStErrors('GARCHLogL', parameters(:,i), data(:,i), grad,hessian,spec,solver);

else

derivatives.grad = grad;

derivatives.hessian = hessian;

end

else

% create starting values

theta0 = InputStartingValues(spec);

pause(.1);

% make theta0 unconstrained

theta0 = RescaleParameters(theta0, 2, spec);

[params, LogL(i),exitflag(i),output,grad,hessian]= fminunc('GARCHLogL',theta0,options,data(:,i),spec,solver);

parameters(:,i)=RescaleParameters(params,1,spec);

yz = menu('calculate asymptotic standard errors?','yes','no');

pause(.1)

if yz == 1

[derivatives, RobVCV, VCV, hessian, RobStE]=CalcStErrors('GARCHLogL', parameters(:,i), data(:,i), grad, hessian, spec, solver);

else

derivatives.grad = grad;

derivatives.hessian = hessian;

RobStE = [];

end

end

if yz == 1

derivatives.grad = grad;

derivatives.hessian = hessian;

GradHess{1,i}=derivatives;

else

GradHess{1,i}=derivatives;

end

[AIC,BIC] = aicbic(-LogL(i),m,T);

output.AIC = AIC;

output.BIC = BIC;

output.LogL = -LogL(i);

evalmodel{1,i} = output;

[dum, dum, dum, dum, udata(:,i)]=GARCHLogL(parameters(:,i),data(:,i),spec,'fmincon');

output.TimeInSeconds = toc;

DisplayResults(parameters(:,i),RobStE,output)

if i

fprintf(1,'Press any key to continue\n\n')

pause

end

end

varargout{1} = udata;

case 'fitCopula'

tic

T = size(data,1); m = size(spec.ctheta0,1);

if strcmp(solver,'fmincon')==1

[parameters, LogL,exitflag,output,lambda,grad,hessian]= fmincon('CopulaLogL',theta0,A,B,[],[],lower,upper,[],options,data,spec,solver);

[dum,dum,Rt]=CopulaLogL(parameters,data,spec, 'fmincon');

if isfield(spec,'comment')==1

yz = 0;

else

yz = menu('calculate asymptotic standard errors?','yes','no');

end

pause(.1)

if yz == 1

[derivatives, RobVCV, VCV, hessian, RobStE]=CalcStErrors('CopulaLogL', parameters, data, grad, hessian, spec, 'fmincon');

else

derivatives.grad = grad;

derivatives.hessian = hessian;

RobStE = [];

end

else

% create starting values

theta0 = InputStartingValues(spec);

pause(.1);

% make theta0 unconstrained

theta0 = RescaleParameters(theta0, 2, spec);

[params, LogL,exitflag,output,grad,hessian]= fminunc('CopulaLogL',theta0,options,data,spec,solver);

parameters=RescaleParameters(params,1,spec);

[dum,dum,Rt]=CopulaLogL(parameters,data,spec, 'fmincon');

yz = menu('calculate asymptotic standard errors?','yes','no');

pause(.1)

if yz == 1

[derivatives, RobVCV, VCV, hessian, RobStE]=CalcStErrors('CopulaLogL', parameters, data, grad, hessian, spec, 'fminunc');

else

derivatives.grad = grad;

derivatives.hessian = hessian;

RobStE = [];

end

end

求大神高手指导,感激不尽!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值