Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-06, 12:20   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
默认 MatLab:有没有一种方法可以调整fmincon以返回3x4的参数矩阵?

我为MatLab编写了以下代码,但到目前为止,它显然仅可用于返回一行参数。该代码由主文件,功能文件(MLE_GARCH)和约束文件(nonlcon_GARCH)组成,如下所示:

clc clear %% Setup Data %% % Input the price levels and dates. Data = readtable('HSI.xlsx','Sheet','HSI Index'); Prices = Data.PX_LAST; Dates = Data.Dates; % Continuous risk free rate. dt = 1/252; % Daily time steps rfd = [0.01 0.02 0.03]*dt; % Duan risk-free rate rfbs = rfd/dt; %BS risk-free rate % Define the returns (pad first return with risk-free rate). r = [rfd; repmat(diff(log(Prices)),1,3)]; residuals = r - mean(r); size = length(r); %% Duan (1995) Pricing Model Estimation %% % Starting values for constrained optimization. start = [0.1 0.1 0.1 0.1]; A = [0 1 1 0]; b = 1; lb = [eps 0 0 -Inf]; % Lower bound for parameters ub = [Inf Inf Inf Inf]; % Upper bound for parameters [params,fval,exitflag,output,llambda,grad,hessian] = fmincon(@(p) ... MLE_GARCH(p, Prices, rfd), start, A, b, [], [], lb, ub, @(c) Nonlcon_GARCH(c)); alpha0 = params(1); alpha1 = params(2); beta1 = params(3); lambda = params(4); 上面的这个是主文件。

function y = MLE_GARCH(params,S,rf) % Finds log-likelihood for the GARCH option pricing model. alpha0 = params(1); alpha1 = params(2); beta1 = params(3); lambda = params(4); N = length(S); % Define the returns (pad first return with risk-free rate) r(1,:) = [rf; price2ret(S)]; % Infer the other conditional instantaneous variances h(1) = alpha0/(1 - alpha1 - beta1); % Initialize the conditional variance recursion for i=2:N h(i) = alpha0 + alpha1*(r(i-1) - rf - lambda*sqrt(h(i-1)) + ... 0.5*h(i-1))^2 + beta1*h(i-1); end % Initialize the log-likelihood recursion for i=1:N LL(i) = - 0.5*log(h(i)) - 0.5/h(i)*(r(i) - rf - lambda*sqrt(h(i)) + ... 0.5*h(i))^2; end % Return the negative log-likelihood function y = -sum(LL); 另一个是功能文件。

function [c, ceq] = Nonlcon_GARCH(params) alpha0 = params(1); alpha1 = params(2); beta1 = params(3); lambda = params(4); % Set inequality constraints for parameters estimation. c = alpha1*(1 + lambda^2) + beta1 - 1 - eps; ceq = []; 而这最后一个是fmincon的约束。我已经尝试更改主文件中的某些内容,并且在优化部分之前一切都很好。但是,当我开始更改功能文件时,fmincon无法运行,它告诉我“ A必须具有16列”。修改后的功能文件如下:

function y = MLE_GARCH_(params,S,rf) % Finds log-likelihood for the GARCH option pricing model. alpha0 = params(1,:); alpha1 = params(2,:); beta1 = params(3,:); lambda = params(4,:); N = length(S); % Define the returns (pad first return with risk-free rate) r = [rf; repmat(price2ret(S),1,3)]; % Infer the other conditional instantaneous variances h(1,:) = alpha0./(1 - alpha1 - beta1); % Initialize the conditional variance recursion for i=2:N h(i,:) = alpha0 + alpha1.*(r(i-1,:) - rf(:) - lambda.*sqrt(h(i-1,:)) + ... 0.5*h(i-1,:)).^2 + beta1.*h(i-1,:); end % Initialize the log-likelihood recursion for i=1:N LL(i,:) = - 0.5.*log(h(i,:)) - 0.5./h(i,:).*(r(i,:) - rf(:) - lambda.*sqrt(h(i,:)) + ... 0.5.*h(i,:))^2; end % Return the negative log-likelihood function y = -sum(LL); 鉴于我的原始代码运行没有问题,如何更改它以使其返回3x4参数矩阵?



更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 03:23


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.