• 大小: 5KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: C/C++
  • 标签: rbf径向基  

资源简介

需要自行下载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     

评论

共有 条评论

相关资源