MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today**New to MATLAB?**

Asked by Ray
on 28 Nov 2012

Hi,

I am trying the run the following function:

function [embedm fnn1 fnn2]=fnn(y,maxm)

% Usage: This function calculates corrected false nearest neighbour.

% Inputs: % y is a vertical vector of time series. % maxm: maximum value of embedding dimension.

% Output: % embedm: proper value for embedding dimension. % fnn1: First criteria of false nearest neighbors. % fnn2: second criteria of false nearest neighbors.

% Copyright(c) Shapour Mohammadi, University of Tehran, 2009 % shmohammadi@gmail.com

% Keywords: Embedding Dimension, Chaos Theory, Lyapunov Exponent, % False Nearest Neighbors.

% Ref: % -Sprott, J. C. (2003). Chaos and Time Series Analysis. Oxford University % Press.

%__________________________________________________________________________ y=y(:); RT=15; AT=2; sigmay=std(y); [nyr,nyc]=size(y); %Embedding matrix m=maxm;

EM=lagmatrix(y,0:m-1);

%EM after nan elimination. EEM=EM(1+(m-1):end,:); [rEEM cEEM]=size(EEM);

embedm=[];

for k=1:cEEM fnn1=[]; fnn2=[]; D=dist(EEM(:,1:k)');

for i=1:rEEM-m-k

d11 = min(D(i,1:i-1)); d12=min(D(i,i+1:end)); Rm=min([d11;d12]); l=find(D(i,1:end)== Rm); if Rm>0 if l+m+k-1<nyr fnn1=[fnn1;abs(y(i+m+k-1,1)-y(l+m+k-1,1))/Rm]; fnn2=[fnn2;abs(y(i+m+k-1,1)-y(l+m+k-1,1))/sigmay]; end end end Ind1=find(fnn1>RT); Ind2=find(fnn2>AT); if length(Ind1)/length(fnn1)<.1 && length(Ind2)/length(fnn1)<.1; embedm=k; break

end end

After entering information for y and mmax, I run fnn. I get the following erro message:

Error using fnn (line 28) Not enough input arguments.

Error in run (line 74) evalin('caller',[script ';']);

What am I doing wrong? Thanks in advance.

*No products are associated with this question.*

Answer by Walter Roberson
on 28 Nov 2012

Accepted answer

The evalin() is part of MATLAB's run() command. However, one should never run() a function.

Instead of giving the command

run fnn

give a command such as

fnn(YourTimeSeries, 3)

where "YourTimeSeries" is "a vertical vector of time series"

## 1 Comment

## per isakson (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/55003#comment_113959