我是 Octave 的新手,尽管我可以说我是一名专业的 Matlab 用户。我在 Windows 机器上通过 PuTTY 在 Linux 服务器(Red Hat)上远程运行 Octave。
我在 Octave 中观察到一个非常奇怪的行为。我打电话给 myfun(a) ,它按预期执行,给出了所寻求的结果。现在,如果我用 b!=a 运行 myfun(b),我会再次得到 myfun(a)。清除 -f 不能解决问题。我需要重新启动八度来更改参数。
我究竟做错了什么?
非常感谢弗朗切斯科
这是我提到的函数的代码:
function [a, v, obj, infos, iter] = mle_garch( p )
#{
% this function estimates the GARCH(1,1) parameters
% it is assumed we pass the adjusted price level p
#}
global y = (diff(log(p))-mean(diff(log(p))))*100;
global h = zeros(size(y));
a0 = [var(y)*0.9; 0.8; 0.1];
[a, obj, infos, iter] = sqp(a0, @loglike_garch, [], @loglike_con, [], [], 1000);
v = sqrt(h * 260);
endfunction
function g = loglike_garch( a )
global y h
n = length(y);
h(1) = var(y);
for i = 2 : n,
h(i) = a(1) + a(2) * h(i-1) + a(3) * y(i-1)^2;
endfor
g = 0.5 * ( sum(log(h)) + sum(y.^2./h) ) / n;
endfunction
function f = loglike_con( a )
f = [1;0;0;0] + [0 -1 -1;eye(3)] * a;
endfunction