📄 rbf网络.cpp
字号:
{77.9, 77.4},
{77.5, 76.4},
{76.7, 74.1},
{75.4, 74.4},
{75.0, 74.1},
{74.1, 73.4},
{72.5, 72.2},
{72.6, 71.4},
{71.3, 70.8},
{70.8, 70.0},
{70.4, 69.1},
{69.1, 68.8},
{69.0, 67.9},
{68.4, 66.7},
{67.4, 66.9},
{66.6, 65.9},
{66.2, 64.8},
{65.0, 65.8},
{64.6, 65.1},
{64.0, 62.5},
{64.3, 62.5},
{63.3, 62.2},
{63.5, 62.2},
{62.2, 59.9},
{62.2, 59.9},
{61.9, 60.0},
{60.8, 59.2},
{60.5, 60.4},
{60.3, 59.2},
{59.2, 59.2},
{59.4, 58.5},
{58.9, 58.4},
{58.5, 57.5},
{57.6, 57.4},
{57.4, 55.8},
{57.2, 55.1},
{57.1, 56.6},
{55.9, 55.5},
{56.8, 55.5},
{55.7, 55.1},
{55.7, 54.1},
{55.1, 55.1},
{54.1, 53.4},
{54.0, 54.2},
{53.3, 52.5},
{53.4, 51.7},
{53.5, 52.5},
{52.5, 52.5},
{52.5, 51.6},
{53.1, 50.9},
{51.7, 50.9},
{52.3, 50.0},
{51.1, 50.9},
{50.8, 48.9},
{50.9, 49.3},
{51.0, 48.6},
{50.8, 50.4},
{50.0, 48.8},
{49.3, 49.2},
{50.1, 49.2},
{48.8, 49.2},
{48.8, 47.5},
{48.9, 49.0},
{48.5, 48.0},
{49.2, 48.5},
{47.8, 46.8},
{48.0, 47.2},
{47.2, 47.3},
{47.2, 46.7},
{47.3, 46.9},
{46.8, 46.8},
{46.9, 46.8},
{46.8, 45.5},
{45.5, 44.1},
{46.8, 45.3},
{45.9, 45.5},
{45.6, 45.5},
{45.7, 45.5},
{46.0, 44.3},
{45.5, 44.7},
{44.7, 44.1},
{44.4, 44.1},
{44.7, 43.7},
{44.7, 43.9},
{43.9, 43.6},
{43.9, 44.7},
{43.9, 43.8},
{43.9, 43.5},
{43.5, 43.5},
{43.6, 43.5},
{43.5, 42.4},
{43.3, 42.8},
{42.2, 43.9},
{42.4, 42.2},
{43.0, 42.6},
{42.3, 41.2},
{42.2, 41.4},
{42.0, 41.4},
{41.9, 41.3},
{42.0, 40.9},
{41.9, 42.2},
{41.1, 40.3},
{42.1, 41.8},
{41.1, 40.3},
{41.4, 40.5},
{41.4, 40.2},
{40.5, 41.8},
{40.3, 40.3},
{40.4, 40.2},
{40.8, 40.3},
{41.1, 40.2},
{40.2, 40.3},
{39.5, 40.3},
{40.2, 40.2},
{40.2, 40.2},
{40.2, 37.6},
{39.4, 40.3},
{38.5, 38.5},
{38.5, 38.5},
{38.5, 38.0},
{38.5, 38.0},
{38.5, 38.5},
{38.5, 37.8},
{38.0, 38.0},
{38.0, 38.3},
{38.0, 37.8},
{38.4, 37.8},
{38.0, 37.2},
{38.0, 37.8},
{37.8, 38.0},
{37.8, 37.6},
{37.8, 37.0},
{37.5, 37.0},
{37.2, 37.2},
{37.2, 36.4},
{37.1, 36.9},
{37.2, 37.0},
{37.0, 35.6},
{36.9, 37.0},
{37.2, 36.9},
{36.9, 35.7},
{36.9, 36.9},
{36.0, 35.6},
{36.3, 36.1},
{37.2, 35.6},
{36.9, 36.9},
{36.1, 35.9},
{35.9, 35.6},
{37.1, 33.9},
{36.4, 35.4},
{36.9, 35.2},
{36.9, 35.8},
{35.7, 35.6},
{36.2, 35.2},
{35.4, 36.9},
{35.2, 37.0},
{35.4, 33.8},
{35.4, 34.1},
{34.7, 33.9},
{34.7, 33.8},
{34.7, 34.5},
{35.3, 34.5},
{34.5, 33.9},
{34.5, 33.7},
{33.9, 33.5},
{33.9, 33.7},
{34.5, 33.9},
{34.5, 33.9},
{34.5, 34.8},
{33.9, 34.4},
{33.9, 33.9},
{33.9, 33.7},
{33.7, 33.1},
{33.9, 33.6},
{33.9, 33.5},
{34.3, 32.7},
{33.7, 33.1},
{33.6, 32.2},
{33.6, 33.6},
{33.5, 32.9},
{33.5, 32.8},
{33.6, 33.6},
{33.5, 32.9},
{32.2, 32.2},
{33.5, 31.9},
{33.9, 33.3},
{32.2, 30.4},
{32.8, 32.2},
{33.7, 32.0},
{32.9, 32.0},
{33.1, 32.0},
{32.4, 31.8},
{33.5, 32.0},
{32.0, 32.0},
{32.0, 32.0},
{32.2, 32.0},
{32.9, 32.2},
{32.0, 32.0},
{32.0, 31.9},
{32.0, 32.0},
{32.0, 32.2},
{32.0, 32.7},
{32.0, 31.2},
{31.4, 29.4},
{31.9, 31.1},
{31.4, 32.0},
{31.9, 30.9},
{31.9, 31.9},
{31.5, 30.4},
{31.2, 31.2},
{31.2, 31.1},
{31.4, 30.6},
{30.6, 31.2},
{31.2, 30.7},
{31.2, 31.1},
{30.6, 30.4},
{31.2, 30.4},
{30.4, 31.2},
{30.6, 31.2},
{30.4, 30.4},
{31.1, 30.4},
{31.1, 30.4},
{31.2, 30.2},
{31.2, 30.3},
{30.4, 29.5},
{30.4, 30.2},
{30.4, 30.3},
{30.4, 30.4},
{30.3, 30.2},
{30.4, 30.3},
{30.4, 30.4},
{30.4, 30.2},
{30.4, 30.3},
{30.2, 30.3},
{30.4, 30.2},
{30.4, 30.2},
{30.4, 29.5},
{30.3, 30.2},
{30.2, 30.2},
{29.8, 30.2},
{30.2, 28.7},
{30.2, 28.7},
{30.3, 29.5},
{29.5, 30.3},
{30.2, 30.2},
{30.4, 29.5},
{30.2, 30.2},
{30.2, 28.9},
{30.2, 28.2},
{30.3, 28.7},
{29.4, 30.2},
{28.7, 30.3},
{28.7, 27.9},
{29.4, 28.7}};
for(i=10;i<10+X_Num+T_Num;i++)
{
data[i-10] = XX[i][0]/100.0;
}
//* double data[X_Num+T_Num] = {1.000000,0.949223,0.823597,0.646973,0.451106,0.269989,0.133986,0.064782,0.071976,0.151836,0.288380,0.456491,0.626501,0.769391,0.861714,0.889400,0.849855,0.752018,0.614463,0.461922,0.320867,0.214948,0.161052,0.166654,0.228850,0.335190,0.466115,0.598519,0.709802,0.781703,0.803265,0.772467,0.696271,0.589144,0.470345,0.360491,0.278001,0.236027,0.240390,0.288828};
// double data[X_Num+T_Num] = {0.011,0.02,0.03,0.04,0.051,0.06,0.07,0.08,0.09,0.101,0.11,0.12,0.13,0.14,0.151,0.16,0.17,0.18,0.19,0.201,0.21,0.22,0.23,0.24,0.251,0.26,0.27,0.28,0.29,0.301,0.31,0.32,0.33,0.34,0.351,0.36,0.37,0.38,0.39,0.401};
/////////////////////////////////////////////////////////////////////
while(p>0)
{
double datax[T_Num][X_Num];
double kk;
j = 0;
n = 0;
for(i=0;i<T_Num;i++)
{
for(j=n;j<n+X_Num;j++)
datax[i][j-n] = data[j];
n++;
}
////////********进行样本训练********////////
for(i=0;i<T_Num;i++) //获取训练样本
{
for(j=0;j<X_Num;j++)
x[j][i] = datax[i][j];
}
for(i=0;i<T_Num;i++) //获取训练输出
Y[i][0] = data[i+X_Num];
for(i=0;i<T_Num;i++)
{
LL[i] = interval(datax[0],datax[i],X_Num); //计算每个样本与第1个样本之间的距离
No[i] = i;
}
compose(LL,No,T_Num); //对各距离进行从小到大的排列,并把样本号对应排列好
for(i=0;i<T_Num;i++)
printf("%f ",LL[i]);
printf("\n");
for(i=0;i<T_Num;i++)
printf("%d ",No[i]);
printf("\n");
kk = LL[T_Num-1]/((T_Num-1)*pp); //“计算因子”
NC[0] = 0; // NC 中保存最终初始中心对应的样本号
i = 1;
mm = 1;
while(i<T_Num)
{
while(LL[i]-LL[i-1]<kk&&i<T_Num-1) //***************
i++;
NC[mm] = No[i];
i++;
mm++;
}
Ix = mm; //隐层节点个数
printf("计算出隐层节点数= %d ",Ix);
printf("\n");
for(i=0;i<Ix;i++)
printf("%d ",NC[i]);
printf("\n");
/////////////////////////////////////////////////////////////////////
t = new double[X_Num*Ix];
t1 = new double[X_Num*Ix];
w = new double[Ix+1];
G = new double[T_Num*(Ix+1)];
uu = new double[Ix+1];
GT = new double[(Ix+1)*T_Num];
GM = new double[(Ix+1)*(Ix+1)];
GD = new double[(Ix+1)*T_Num];
if(t==NULL)
{
printf("Error!!!");
return;
}
for(j=0;j<Ix;j++) //初始化中心
{
for(i=0;i<X_Num;i++)
t[i*Ix+j] = x[i][NC[j]];
}
for(j=0;j<Ix;j++)
{
for(i=0;i<X_Num;i++)
printf("%f ",t[i*Ix+j]);
printf("\n");
}
printf("\n");
k_means(); //计算并输出求得的基函数中心——t[][]
getError(); //计算并输出方差——g
wStudy(); //计算并输出求得的隐含层输出矩阵——G[][]
////////********计算预测输出********////////
fputs("预测值:",fp);
fprintf(fp,"(pp=%f,Ix=%d,p=%d)\n",pp,Ix,p);
// while(jj<T_Num) //预测设定组数的数
// {
// for(i=0;i<X_Num;i++) //预测时的输入向量——xx[][]
// xx[i][0] = x[i][jj];
for(i=0;i<X_Num;i++)
xx[i][0] = data[i+T_Num];
compute_uu(); //计算隐藏层输出
multiply(uu,w,*yy,1,Ix+1,1); //计算预测值
printf("yy = %f \n",yy[0][0]*100.0);
fprintf(fp,"%f ",yy[0][0]*100.0);
// jj++;
// }
// printf("\n\n迭代次数:%d\n\n",N_Max); //输出迭代次数
fputs("\n\n",fp);
delete [] t;
delete [] t1;
delete [] w;
delete [] G;
delete [] uu;
delete [] GT;
delete [] GM;
delete [] GD;
for(i=0;i<X_Num+T_Num-1;i++) //连续预测p个数,原样本顺序左移,右端补上最新预测值
data[i] = data[i+1];
data[X_Num+T_Num-1] = yy[0][0];
p--;
}
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -