⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gpkolmogorov.cpp

📁 关于非线性时间序列中同时计算关联维和Kolmogorov熵的程序,
💻 CPP
字号:
// GPKolmogorov.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream.h>
#include "Henon.h"
#include "HyperRossler.h"
#include "Lorenz.h"
#include "GPKolmogorov.h"

#define MAXLEN 10000
#define MLEN 12
#define RLEN 50


int main(int argc, char* argv[])
{
	double Seq[MAXLEN]={0};
	//int Henon_len=3000;
	//int Lorenz_len=3000;
	int HyperRossler_len=3000;
	//double *Henon_X=new double[Henon_len];
	//double *Henon_Y=new double[Henon_len];
	//Henon映射初值
	//double Henon_x0=1;
	//double Henon_y0=0;
	//lorenz映射初值
	//double Lorenz_init[3] = {15,13,37};
	//double *Lorenz_X=new double[Lorenz_len];
	//double *Lorenz_Y=new double[Lorenz_len];
	//double *Lorenz_Z=new double[Lorenz_len];
	//超Rossler映射初值
	double HyperRossler_init[4] = {-20,0,0,15};
    double *HyperRossler_X=new double[HyperRossler_len];
	double *HyperRossler_Y=new double[HyperRossler_len];
	double *HyperRossler_Z=new double[HyperRossler_len];
	double *HyperRossler_W=new double[HyperRossler_len];
	//嵌入维
	int m[MLEN];
	//延时
	int delay=15;
	double r[RLEN];
	//关联维输出矩阵
	double ln_C[MLEN][RLEN];
	double *lncc[MLEN];
	double ln_r[RLEN];
	double mean_x[MLEN]={0};
	double mean_y[MLEN]={0};
	double lxx[MLEN]={0};
	double lxy[MLEN]={0};
	double sum_lxx=0;
	double sum_lxy=0;
	double a_D;
	double b_D[MLEN];
	double Kolmogorov[MLEN-1]; //得到的Kolmogorov矩阵
    int i,j;

	for (i=0; i<MLEN; i++)
	{
		lncc[i] = ln_C[i];
	}
    //定义嵌入维矩阵
	for (i=0; i<MLEN; i++)
	{
		m[i] = 8+2*i;
	}
	for (i=0; i<RLEN; i++)
	{
		r[i] = 3+2*i;
	}

	//Henon2(Henon_X,Henon_Y,Henon_x0,Henon_y0,Henon_len);
	//lorenz(Lorenz_X,Lorenz_Y,Lorenz_Z,Lorenz_init,Lorenz_len);
	hyperrossler(HyperRossler_X,HyperRossler_Y,
		HyperRossler_Z,HyperRossler_W,HyperRossler_init,HyperRossler_len);
/*	for (i=0; i<Henon_len; i++)
	{
		cout<<Henon_X[i]<<" ";
		if (i%7==6)
			cout<<endl;
	}*/
 /*   for (i=0; i<Lorenz_len; i++)
	{
		cout<<Lorenz_X[i]<<" ";
		if (i%7==6)
			cout<<endl;
	}*/
    for (i=0; i<HyperRossler_len/30; i++)
	{
		cout<<HyperRossler_X[i]<<" ";
		if (i%7==6)
			cout<<endl;
	}
	GP_Kol(HyperRossler_X,r,HyperRossler_len,m,RLEN,MLEN,delay,lncc,ln_r);
    for (i=0; i<MLEN; i++)
	{
		for (j=0; j<RLEN; j++)
			cout<<ln_C[i][j]<<" ";
		if (j%7==6)
			cout<<endl;
	}
	//计算x,y的均值
	for (i=0; i<MLEN; i++)
	{
		for (j=0; j<RLEN; j++)
		{
			mean_y[i] += ln_C[i][j];
			mean_x[i] += ln_r[j];
		}
		mean_y[i] /= RLEN;
        mean_x[i] /= RLEN;
	}
	//计算lxy,lxx的值及其和.
	for (i=0; i<MLEN; i++)
	{
		for (j=0; j<RLEN; j++)
		{
			lxy[i] += (ln_C[i][j]-mean_y[i])*(ln_r[j]-mean_x[i]);
			lxx[i] += (ln_r[j]-mean_x[i])*(ln_r[j]-mean_x[i]);
		}
		sum_lxy += lxy[i];
		sum_lxx += lxx[i];
	}
	a_D = sum_lxy/sum_lxx;
	cout<<"嵌入维为:"<<a_D<<endl;
	for (i=0; i<MLEN; i++)
	{
		b_D[i] = mean_y[i]-a_D*mean_x[i];
	}
	//得到Kolmogorov熵
	cout<<"Kolmogorov熵为:"<<endl;
	for (i=0; i<MLEN-1; i++)
	{
		Kolmogorov[i] = (b_D[i]-b_D[i+1])/(2*0.1);
		cout<<Kolmogorov[i]<<" ";
	}
	//delete [] Henon_X;
	//delete [] Henon_Y;

	//delete [] Lorenz_X;
	//delete [] Lorenz_Y;
	//delete [] Lorenz_Z;

	delete [] HyperRossler_X;
	delete [] HyperRossler_Y;
	delete [] HyperRossler_Z;
	delete [] HyperRossler_W;

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -