麻烦大侠帮忙看看下面的程序有什么问题:
是算hurst的。
请问这个maxT是时间窗口吧?
我在窗口输入
H=genhurst(S,2,100)
为什么H只有一个值?是循环出问题了嘛?
function [mH,sH]=genhurst(S,q,maxT)
if nargin < 2, q = 1; maxT = 19; end
if nargin < 3, maxT = 19; end
if size(S,1)==1 && size(S,2)>1
S = S';
elseif size(S,1)>1 && size(S,2)>1
fprintf('S must be 1xT \n')
return
end
if size(S,1) < (maxT*4 | 60)
warning('Data serie very short!')
end
L=length(S);%l表示的是观测值个数
lq = length(q);%这个值肯定是1?
loo=0;
ll = [];%赋值为空数组
H1 = [];
H2 = [];
H = [];
ttmm =[];
k = 0;
for Tmax=5:maxT % Tmat=初值:步长,但为什么从5开始呢?
k = k+1;
x = 1:Tmax;
ttmm(end+1)=Tmax;
mcord1 = [];
mcord2 = [];
for tt = 1:Tmax
dV = S((tt+1):tt:L) - S([(tt+1):tt:L]-tt);
VV = S([(tt+1):tt:(L+tt)]-tt)';
ll(tt)= length(dV);
N = ll(tt)+1;
X = 1:N;
Y = VV;
mx = sum(X)/N;
SSxx = sum(X.^2) - N*mx^2;
my = sum(Y)/N;
SSxy = sum(X.*Y) - N*mx*my;
cc(1) = SSxy/SSxx;
cc(2) = my - cc(1)*mx;
ddVd = dV - cc(1);
VVVd = VV - cc(1).*[1:ll(tt)+1] - cc(2);
for qq=1:lq
mcord(tt,qq)=mean(abs(ddVd).^q(qq))/mean(abs(VVVd).^q(qq));
end
end
mx = mean(log10(x));
SSxx = sum(log10(x).^2) - Tmax*mx^2;
for qq=1:lq
my = mean(log10(mcord(:,qq)));
SSxy = sum(log10(x).*log10(mcord(:,qq))') - Tmax*mx*my;
H(k,qq) = SSxy/SSxx;
end
end
mH = mean(H)'./q(:);
if nargout == 2
sH = std(H)'./q(:);
elseif nargout == 1
sH = [];
end