资源简介
需要自行下载matrix.h文件,可以直接运行,得出插值估计值与实际值比较的结果。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include “matrix.h“
using namespace std;
const int P=100; //输入样本的数量
vector X(P); //输入样本
Matrix Y(P1); //输入样本对应的期望输出
const int M=10; //隐藏层节点数目
vector center(M); //M个Green函数的数据中心
vector delta(M); //M个Green函数的扩展常数
Matrix Green(PM); //Green矩阵
Matrix Weight(M1); //权值矩阵
/*Hermit多项式函数*/
inline double Hermit(double x){
return 1.1*(1-x+2*x*x)*exp(-1*x*x/2);
}
/*产生指定区间上均匀分布的随机数*/
inline double uniform(double floordouble ceil){
return floor+1.0*rand()/RAND_MAX*(ceil-floor);
}
/*产生区间[floorceil]上服从正态分布N[musigma]的随机数*/
inline double RandomNorm(double mudouble sigmadouble floordouble ceil){
double xproby;
do{
x=uniform(floorceil);
prob=1/sqrt(2*M_PI*sigma)*exp(-1*(x-mu)*(x-mu)/(2*sigma*sigma));
y=1.0*rand()/RAND_MAX;
}while(y>prob);
return x;
}
/*产生输入样本*/
void generateSample(){
for(int i=0;i double in=uniform(-44);
X[i]=in;
Y.put(i0Hermit(in)+RandomNorm(00.1-0.30.3));
}
}
/*寻找样本离哪个中心最近*/
int nearest(const vector& centerdouble sample){
int rect=-1;
double dist=numeric_limits::max();
for(int i=0;i if(fabs(sample-center[i]) dist=fabs(sample-center[i]);
rect=i;
}
}
return rect;
}
/*计算簇的质心*/
double calCenter(const vector &g){
int len=g.size();
double sum=0.0;
for(int i=0;i sum+=g[i];
return sum/len;
}
/*KMeans聚类法产生数据中心*/
void KMeans(){
assert(P%M==0);
vector > group(M); //记录各个聚类中包含哪些样本
double gap=0.001; //聚类中心的改变量小于为个值时,迭代终止
for(int i=0;i center[i]=X[10*i+3]; //输入是均匀分布的,所以我们均匀地选取
}
while(1){
for(int i=0;i
- 上一篇:c语言之汉诺塔无限关卡游戏文件密码是:汉诺塔
- 下一篇:c语言期末大作业
评论
共有 条评论