声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4996|回复: 3

[综合讨论] Strings passed to EVAL cannot contain function declarations 出错求助

[复制链接]
发表于 2008-1-13 20:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
各位大虾好,我在做R/S分析编程的时候,程序编完出现“??? Strings passed to EVAL cannot contain function declarations.”为什么呢?
程序如下:
function [logRS,logERS,V]=RSana(x,n,method,q)
%Syntax: [logRS,logERS,V]=RSana(x,n,method,q)
%____________________________________________
%
% Performs R/S analysis on a time series.
%
% logRS is the log(R/S).
% logERS is the Expectation of log(R/S).
% V is the V statistic.
% x is the time series.
% n is the vector with the sub-periods.
% method can take one of the following values
%
'Hurst' for the Hurst-Mandelbrot variation.

%
'Lo' for the Lo variation.

%
'MW' for the Moody-Wu variation.

%
'Parzen' for the Parzen variation.

% q can be either
%
a (non-negative) integer.

%
'auto' for the Lo's suggested value.

%
%
% References:
%
% Peters E (1991): Chaos and Order in the Capital Markets. Willey
%
% Peters E (1996): Fractal Market Analysis. Wiley
%
% Lo A (1991): Long term memory in stock market prices. Econometrica
% 59: 1279-1313
%
% Moody J, Wu L (1996): Improved estimates for Rescaled Range and Hurst
% exponents. Neural Networks in Financial Engineering, eds. Refenes A-P
% Abu-Mustafa Y, Moody J, Weigend A: 537-553, Word Scientific
%
% Hauser M (1997): Semiparametric and nonparametric testing for long
% memory: A Monte Carlo study. Empirical Economics 22: 247-271
%
%
% Alexandros Leontitsis
% Department of Education
% University of Ioannina
% 45110 - Dourouti
% Ioannina
% Greece
%
% University e-mail: me00743@cc.uoi.gr
% Lifetime e-mail: leoaleq@yahoo.com
% Homepage: http://www.geocities.com/CapeCanaveral/Lab/1421
%
% 1 Jan 2004.

if nargin<1 | isempty(x)==1

error('You should provide a time series.');

else

% x must be a vector


if min(size(x))>1


error('Invalid time series.');


end


x=x(:);


% N is the time series length


N=length(x);

end

if nargin<2 | isempty(n)==1

n=1;

else

% n must be either a scalar or a vector


if min(size(n))>1


error('n must be either a scalar or a vector.');


end


% n must be integer


if n-round(n)~=0


error('n must be integer.');


end


% n must be positive


if n<=0


error('n must be positive.');


end

end

if nargin<4 | isempty(q)==1

q=0;

else

if q=='auto'


t=autocorr(x,1);


t=t(2);


q=((3*N/2)^(1/3))*(2*t/(1-t^2))^(2/3);


else


% q must be a scalar


if sum(size(q))>2


error('q must be scalar.');



end


% q must be integer


if q-round(q)~=0


error('q must be integer.');


end


% q must be positive


if q<0


error('q must be positive.');


end


end

end


for i=1:length(n)
   

% Calculate the sub-periods


a=floor(N/n(i));

   

% Make the sub-periods matrix


X=reshape(x(1:a*n(i)),n(i),a);

   

% Estimate the mean of each sub-period


ave=mean(X);

   

% Remove the mean from each sub-period


cumdev=X-ones(n(i),1)*ave;

   

% Estimate the cumulative deviation from the mean


cumdev=cumsum(cumdev);

   

% Estimate the standard deviation


switch method


case 'Hurst'


% Hurst-Mandelbrot variation


stdev=std(X);


case 'Lo'


% Lo variation


for j=1:a


sq=0;


for k=0:q


v(k+1)=sum(X(k+1:n(i),j)'*X(1:n(i)-k,j))/(n(i)-1);


if k>0


sq=sq+(1-k/(q+1))*v(k+1);


end


end


stdev(j)=sqrt(v(1)+2*sq);


end


case 'MW'


% Moody-Wu variation


for j=1:a


sq1=0;


sq2=0;


for k=0:q


v(k+1)=sum(X(k+1:n(i),j)'*X(1:n(i)-k,j))/(n(i)-1);


if k>0



sq1=sq1+(1-k/(q+1))*(n(i)-k)/n(i)/n(i);


sq2=sq2+(1-k/(q+1))*v(k+1);


end


end


stdev(j)=sqrt((1+2*sq1)*v(1)+2*sq2);


end


case 'Parzen'


% Parzen variation


if mod(q,2)~=0


error('For the "Parzen" variation q must be dived by 2.');


end


for j=1:a


sq1=0;


sq2=0;


for k=0:q


v(k+1)=sum(X(k+1:n(i),j)'*X(1:n(i)-k,j))/(n(i)-1);


if k>0 & k<=q/2


sq1=sq1+(1-6*(k/q)^2+6*(k/q)^3)*v(k+1);


elseif k>0 & k>q/2


sq2=sq2+(1-(k/q)^3)*v(k+1);


end


end


stdev(j)=sqrt(v(1)+2*sq1+2*sq2);


end


otherwise


error('You should provide another value for "method".');


end

   

% Estiamte the rescaled range


rs=(max(cumdev)-min(cumdev))./stdev;

   

clear stdev

   

% Take the logarithm of the mean R/S


logRS(i,1)=log10(mean(rs));

   

if nargout>1

        

% Initial calculations fro the log(E(R/S))


j=1:n(i)-1;


s=sqrt((n(i)-j)./j);


s=sum(s);

        

% The estimation of log(E(R/S))


logERS(i,1)=log10(s/sqrt(n(i)*pi/2));

        


% Other estimations of log(E(R/S))


%logERS(i,1)=log10((n(i)-0.5)/n(i)*s/sqrt(n(i)*pi/2));


%logERS(i,1)=log10(sqrt(n(i)*pi/2));

        

end

   

if nargout>2


% Estimate V


V(i,1)=mean(rs)/sqrt(n(i));


end


end
       该程序也是参照本论坛里高手编写的,应该不会有错误。但为什么出现上面那句话?
       谢谢各位大虾。。。。

[ 本帖最后由 eight 于 2008-1-21 18:49 编辑 ]
回复
分享到:

使用道具 举报

发表于 2008-1-14 08:52 | 显示全部楼层
程序里没有eval啊,是不是你调用的不对啊
 楼主| 发表于 2008-1-14 21:56 | 显示全部楼层
LS你好。我写了个M文件,貌似解决了这个问题 呵呵 谢谢
发表于 2008-1-21 18:50 | 显示全部楼层


我注意到你发的几个帖子都是基础问题,希望你先好好阅读 for 初学者的书籍或者资料
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-12 06:45 , Processed in 0.066170 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表