总感觉G_P(mex)算法中少了点啥呢?大侠小虾们都来看看!
#include "mex.h"#include "math.h"
/*****************************************************************
*the function is used to calculate correlation dimention with G-P algorithm
*data:the time series
*r: the r series
*N: the length of the time series
*delay : the delay of the time series
*rlen: the length of r series
*ln_C: the correlation dimention series
* xiaoxiaoyu
******************************************************************/
void G_P(double data[], double r[], int N, int m,
int rlen, int delay, double ln_C[],double ln_r[])
{
double distance;
double max=0;
int cr=0;
int i,j,k,l;
double Cr=0;
int M=N-(m-1)*delay;
for (l=0; l<rlen; l++)
{
for (i=0; i<M-1; i++)
{
for (j=i+1; j<M; j++)
{
for (k=0; k<m; k++)
{
distance = fabs(data-data);
if (distance>max)
max = distance;
}
if (r>=max)
cr++;
max = 0;
}
}
Cr = cr*2.0/(M*(M-1));
cr = 0;
ln_C = log(Cr);
ln_r = log(r);
}
}
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
double *data;
double *r;
int m;
int delay;
double *ln_C;
double *ln_r;
int datalen,rlen;
if (nrhs!=4)
mexErrMsgTxt("Four inputs required!");
else if (nlhs>2)
mexErrMsgTxt("Too many output arguments!");
datalen = mxGetN(prhs);
rlen = mxGetN(prhs);
m = mxGetScalar(prhs);
delay = mxGetScalar(prhs);
//define the two output arguments
plhs = mxCreateDoubleMatrix(1,rlen,mxREAL);
plhs = mxCreateDoubleMatrix(1,rlen,mxREAL);
data = mxGetPr(prhs);
r = mxGetPr(prhs);
ln_C = mxGetPr(plhs);
ln_r = mxGetPr(plhs);
G_P(data,r,datalen,m,rlen,delay,ln_C,ln_r);
}
我总感觉这个程序中少了r的计算呢?对了,计算r有哪几种方法?最近一直在学混沌,但一直没怎么弄懂,希望大侠小虾们帮帮我,小弟在这谢谢了!
回复 楼主 heqiangyong 的帖子
这里面的r是什么意思?回复 沙发 无水1324 的帖子
不好意思,搞错了,我把程序看错了,但也一直没搞懂数据是怎么输入进去的,int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]这几个参数分别代表着输出参数的个数,输出参数的mxarray数组,输入参数的个数,输入参数的mxarray数组,我个人认为输入参数的数组包括数据长度N,输入的嵌入维数m,步长ss,还有延迟时间,不知道我我说的对不?但一直没弄明白这些数怎么输入进去!不知道无水大哥有什么看法?
页:
[1]