模式识别c语言ISODATA算法.doc
上传人:qw****27 上传时间:2024-09-11 格式:DOC 页数:13 大小:41KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

模式识别c语言ISODATA算法.doc

模式识别c语言ISODATA算法.doc

预览

免费试读已结束,剩余 3 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

c语言编写的ISODATA程序#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<time.h>#include<ctype.h>#defineMAXNUM100//最大模式个数#defineMAXDIM10//最大模式维数#defineK0.5//分裂时使用的比值#defineMAXDOUBLE1.0e20//最大双精度值#defineN10//实际模式个数#defineDIM2//实际模式维数structPattern//模式结构体{intn;//模式序号floats[MAXDIM];//模式数据};structCluster//类结构体{structPatternz;//类中心intn;//类中包含的模式数目floatavg_d;//模式到类心的平均距离structPatterny[MAXNUM];//模式floatsigma[MAXDIM];//分量的标准差intmax;//用于记录类内距离标准差矢量最大的分量下标floatsigma_max;//类内分量距离标准差最大值};structPatternInitPattern(inti,floata,floatb)//对样本模式进行初始化{structPatterntemp;temp.n=i;temp.s[0]=a;temp.s[1]=b;returntemp;}//以下为各参数声明intc=3;//预期的类数intNc=1;//初始聚类中心个数intON=1;//每一类中允许的最少模式数(小于此数不可单独成类)floatOS=1;//类内分量分布的标准差上限(大于此数就分裂)floatOC=4;//两类中心间的最小距离下限(小于此数两类合并)intL=1;//在每次迭代中可以合并的类的最大对数intI=8;//最多迭代次数structPatternx[N];//全部模式structClusterw[N];//全部类floatD[MAXNUM][MAXNUM];//各类对中心间的距离floatdis;//总体平均距离intiter=1;//记录迭代次数inti,j;//循环变量//以下为程序用到的调用函数voidInit();voidISODATA();voidInitCenter();voidClustering();floatDistance(structPatternx1,structPatternx2);structClusterInsert(structPatterna,structClusterb);intCheckAndUnion();voidCalParameter();structPatternCalCenter(structClustera);floatCal_D(inti);voidCalSigma();intdivide();voidCalCenterDis();intUnionByOC();voidUnion(inta,intb);voidPrintCluster();voidmain(){Init();printf("\n******************ISODATA算法程序**************************\n");printf("本实验使用样本集如下:\n");x[0]=InitPattern(0,0,0);x[1]=InitPattern(1,3,8);x[2]=InitPattern(2,2,2);x[3]=InitPattern(3,1,1);x[4]=InitPattern(4,5,3);x[5]=InitPattern(5,4,8);x[6]=InitPattern(6,6,3);x[7]=InitPattern(7,5,4);x[8]=InitPattern(8,6,4);x[9]=InitPattern(9,7,5);for(i=0;i<N;i++)//打印本程序所使用样本{printf("\tX(%d):(",x[i].n);for(j=0;j<DIM-1;j++)printf("%3.2f,",x[i].s[j]);printf("%3.2f);\n",x[i].s[j]);}ISODATA();//ISODATA聚类程序system("pause");}voidInit()//对两结构体变量初始化(赋零值){inti,j,k,l;for(i=0;i<N;i++){x[i].n=0;w[i].n=0;w[i].avg_d=0;w[i].max=0;w[i].sigma_max=0;w[i].z.n=0;for(j=0;j<MAXDIM;j++){x[i].s[j]=0;w[i].si