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

📄 加权一阶局域预测法对logistic影射进行预测.txt

📁 很高兴成为这里的一员,我将继续努力,多多上传好的代码,文件里有一些自己写的,也有一些收集的程序,基本上都有解释.
💻 TXT
字号:
#include <stdlib.h>
#include <math.h>
#include <stdio.h>

#define NUM	3
#define L   200

void Pre_Next_Arrvl(int* array, int num, int parameter_m, int parameter_T, int* data_pre);

//record data for multi-simulation
//static int Get_Stat(int* Actual,int* Predicted,int Num,int parameter_m,int parameter_T);
//record data for single-simulation
void Get_Stat(int* Actual,int* Predicted,int Num);
void Logistic_get(int number, double* out);

void main(void)
{
	int i,j;
	int data[L];
	double output[10000];
	int k = 10000;
	int T = 3;
	int m = 2;
	int temp_pks;
	int Num_need_to_Pre=400;
	int Predicted_Arrvl[400];
	int Actual_Arrvl[400];



	Logistic_get(k,output);
	


	for( i = 3000; i < 3000 + Num_need_to_Pre; i++ )
	{
		for(j = 0; j < L; j++)
		{
			data[j] = output[i+j] * 1000;
		}
		Pre_Next_Arrvl(data,L,m,T,&temp_pks);
		Predicted_Arrvl[i - 3000] = temp_pks;
		Actual_Arrvl[i - 3000] = output[i + L] * 1000;
	}
	//record data for single-simulation
	Get_Stat(Actual_Arrvl,Predicted_Arrvl,Num_need_to_Pre);

}

void Pre_Next_Arrvl(int* array, int num, int parameter_m, int parameter_T, int* data_pre)
{
	int		position[NUM];
	int		distance[NUM];
	int		temp;
	int		i, j, k;
	double  temp_w,weighted[NUM];
	double	coe1 = 0, coe2 = 0, e_wf = 0, f_wf = 0;
	double	a_1, b_1;
	int		range;
	
	range = num / ((parameter_m - 1) * parameter_T) - 2;   //attention, please!!!  why " - 2 " ?
	for (i = 0; i < NUM; i++){  //initiate the array distance[] and position[]
		position[i] = 0;
		distance[i] = 0;
	}

	//find the nearest neighbers	
	for (k = 0; k < NUM; k++)
	{
		for (i = 0; i < parameter_m; i++)
		{
			distance[k] += (array[num - 1 - (parameter_m - 1) * parameter_T + i * parameter_T] - array[(num - 1  - (range + 1) * (parameter_m - 1) * parameter_T)  + k + i * parameter_T]) * (array[num - 1 - (parameter_m - 1) * parameter_T + i * parameter_T] - array[(num - 1  - (range + 1) * (parameter_m - 1) * parameter_T)  + k + i * parameter_T]);
		}
		position[k] = (num - 1  - (range + 1) * (parameter_m - 1) * parameter_T + k);
	}

   //rank the distance[]
	for (i = 0; i < NUM - 1; i++)
	{
		for(j = i + 1; j < NUM; j++)
		{
			if(distance[i] > distance[j])
			{
				temp = distance[i];
				distance[i] = distance[j];
				distance[j] = temp;
				temp = position[i];
				position[i] = position[j];
				position[j] = temp;
			}
		}
	}
	
	
	for (i = (num - 1  - (range + 1) * (parameter_m - 1) * parameter_T) + NUM; i < num - 1 - 2 * (parameter_m - 1) * parameter_T ; i++) 

													     //find the nearest neighber of a data in a range in order to ensure they are
	{                                                       //in the different orbit and also have some relation 
		temp = 0;
		for (j = 0; j < parameter_m; j++)
		{
   			temp += (array[num - 1 - (parameter_m - 1) * parameter_T + j * parameter_T] - array[i + j * parameter_T]) * (array[num - 1 - (parameter_m - 1) * parameter_T + j * parameter_T] - array[i + j * parameter_T]);
		}

		//update the nearest neighbers
		if(temp < distance[NUM - 1])
		{
			for(k = 0; k < NUM -1; k++)
			{
				if(temp < distance[k])
				{
					for(j = NUM - 1; j > k; j--)
					{
						distance[j] = distance[j - 1];
						position[j] = position[j - 1];
					}
					distance[k] = temp;
					position[k] = i;
					break;
				}
			}
		}
	}

	temp_w = 0;
	for(i = 0; i < NUM; i++)
	{
		temp_w += exp((double)(-(distance[i] - distance[0]) / (distance[0] + 1))); 
	}
	for(i = 0; i < NUM; i++)
	{
		weighted[i] = exp((double)(-(distance[i] - distance[0]) / (distance[0] + 1))) /temp_w;
	}
	//computing the coefficience of the fuction
	for(i = 0; i < NUM; i++)
	{
		for(j = 0; j < parameter_m; j++)
		{
			coe1 += weighted[i] * array[position[i] + j * parameter_T];
			coe2 += weighted[i] * array[position[i] + j * parameter_T] * array[position[i] + j * parameter_T];
			e_wf += weighted[i] * array[position[i] + j * parameter_T] * array[position[i] + 1 + j * parameter_T];
			f_wf += weighted[i] * array[position[i] + 1 + j * parameter_T];
		}
	}
	b_1 = (coe1 * f_wf - parameter_m * e_wf) / (coe1 * coe1 - coe2 * parameter_m);
	a_1 = (f_wf - coe1 * b_1) / parameter_m;
	printf("a is %f <<=>> b is %f\n",a_1,b_1);
	*data_pre = a_1 + b_1 * array[num - 1];

 }



void Logistic_get(int number, double* out)
{
	int i;
	double x = 0.1;
	double u = 4.0;

	for (i = 0; i < number; i++)
	{
		out[i] = u * x * (1 - x);
		x = out[i];
	}

}


void Get_Stat(int* Actual,int* Predicted,int Num)
	{
	double error_rate;
	int i;
	int k;
	
	FILE *fp1;
	FILE *fp2;
	
	error_rate=0;
	k=0;	
	fp1=fopen("actual_arrival.txt","wb");
	if(fp1==NULL)
	printf("can not open actual_arrival.txt.\n");
	fp2=fopen("predicted_arrival.txt","wb");
	if(fp2==NULL)
	printf("can not open predicted_arrival.txt.\n");
	
	for(i=0;i<Num;i++)
		{
		fprintf(fp1,"%d",Actual[i]);
		fputc(' ',fp1);
		printf("%d ",Actual[i]);
		}
	printf("\n");
	for(i=0;i<Num;i++)
		{
				
		fprintf(fp2,"%d",Predicted[i]);
		fputc(' ',fp2);
		printf("%d ",Predicted[i]);
		}
	printf("\n");
	fclose(fp1);
	fclose(fp2);
	for(i=0;i<Num;i++)
		{
		if(Actual[i]!=0)
			{
			error_rate+=(double)(fabs(Actual[i]-Predicted[i])/Actual[i]);			
			k++;
			}
		}
		error_rate=error_rate/k;
	printf("Average Predicted Error Rate: %f.\n",error_rate);
	}

⌨️ 快捷键说明

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