欢迎来到天天文库
浏览记录
ID:15135954
大小:41.50 KB
页数:13页
时间:2018-08-01
《模式识别c语言isodata算法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、c语言编写的ISODATA程序#include#include#include#include#include#include#defineMAXNUM 100 //最大模式个数#defineMAXDIM 10 //最大模式维数#defineK 0.5 //分裂时使用的比值#defineMAXDOUBLE 1.0e20 //最大双精度值#defineN 10
2、 //实际模式个数#defineDIM 2 //实际模式维数structPattern //模式结构体{ intn; //模式序号 floats[MAXDIM]; //模式数据 }; structCluster //类结构体 { structPatternz; //类中心 intn; //类中包含的模式数目 floatavg_d; //模式到类心的
3、平均距离 structPatterny[MAXNUM]; //模式 floatsigma[MAXDIM]; //分量的标准差 intmax; //用于记录类内距离标准差矢量最大的分量下标 floatsigma_max; //类内分量距离标准差最大值};structPatternInitPattern(inti,floata,floatb) //对样本模式进行初始化{ structPatterntemp; temp.n=i; temp.s[0]=
4、a; temp.s[1]=b; returntemp;}//以下为各参数声明intc=3; //预期的类数intNc=1; //初始聚类中心个数intON=1; //每一类中允许的最少模式数(小于此数不可单独成类)floatOS=1; //类内分量分布的标准差上限(大于此数就分裂)float OC=4; //两类中心间的最小距离下限(小于此数两类合并)intL=1;
5、 //在每次迭代中可以合并的类的最大对数intI=8; //最多迭代次数structPatternx[N]; //全部模式structClusterw[N]; //全部类float D[MAXNUM][MAXNUM]; //各类对中心间的距离floatdis; //总体平均距离int iter=1; //记录迭代次数int i,j;
6、 //循环变量//以下为程序用到的调用函数voidInit();voidISODATA();voidInitCenter();voidClustering();floatDistance(structPatternx1,structPatternx2);structClusterInsert(structPatterna,structClusterb); intCheckAndUnion();voidCalParameter();structPatternCalCenter(structClustera);floatCal_D(inti
7、);voidCalSigma();intdivide();voidCalCenterDis();intUnionByOC();voidUnion(inta,intb);voidPrintCluster();voidmain(){ Init(); printf("******************ISODATA算法程序**************************"); printf("本实验使用样本集如下
此文档下载收益归作者所有