資源簡介
需要自行下載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語言期末大作業
評論
共有 條評論