基于C+的矢量量化器代码课件_第1页
基于C+的矢量量化器代码课件_第2页
基于C+的矢量量化器代码课件_第3页
基于C+的矢量量化器代码课件_第4页
基于C+的矢量量化器代码课件_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、程序代码:具体代码如下:/ #include <vcl.h>#pragma hdrstop#include <math.h>#include "VV.h"#include "math.hpp"/#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;/ _fastcall TForm1:TForm1(TComponent* Owner): TForm(Owner)/void _fastcall TForm1:Button6Click(TO

2、bject *Sender)Application->MessageBox(" 成训练矢量, 成初始码书, 生成最优码书, 进 行码字转换 "," 说明信息 ",MB_OK);int Range1;void _fastcall TForm1:Edit5Change(TObject *Sender) Range1=atoi(this->Edit5->Text.c_str();/ float a1000; float b32,c1000,f32;void _fastcall TForm1:Button1Click(TObject *Send

3、er) ListBox1->Clear();ListBox2->Clear();ListBox3->Clear();Edit1->Clear();Edit2->Clear(); Memo1->Clear();给 a 赋值 且保证各个元素不相等long int x,y; for(x=0;x<1000;x+) / y=random(Range1); for(int j=0;j<1000;j+) if(y=aj) break; ax=y; for(x=0;x<1000;x+) y=random(Range1);for(int j=0;j<1

4、000;j+) if(y=cj) break; cx=y; for(x=0;x<1000;x+) AnsiString an;an=ax; an+=" " an+="," an+=" " an+=cx;ListBox1->Items->Add(an);/double Mean1;void _fastcall TForm1:Edit3Change(TObject *Sender) Mean1=atoi(this->Edit3->Text.c_str();/double StdDev1;void _fastc

5、all TForm1:Edit4Change(TObject *Sender) StdDev1=atoi(this->Edit4->Text.c_str();/void _fastcall TForm1:Button5Click(TObject *Sender) ListBox1->Clear();给 a 赋值 且保证各个元素不相等ListBox2->Clear(); ListBox3->Clear(); Edit1->Clear(); Edit2->Clear(); Memo1->Clear(); double y; int x; for(x=

6、0;x<1000;x+) / y=RandG(Mean1,StdDev1); for(int j=0;j<1000;j+) if(y=aj) break; ax=y; for(x=0;x<1000;x+) y=RandG(Mean1,StdDev1); for(int j=0;j<1000;j+) if(y=cj) break; cx=y; for(x=0;x<1000;x+) AnsiString an; an=ax; an+=" " an+="," an+=" " an+=cx;ListBox1-&g

7、t;Items->Add(an); /void _fastcall TForm1:Button2Click(TObject *Sender) /ListBox2->Clear(); for(int q=0;q<32;q+) bq=0; fq=0;初始化数组 bfor(int q=0;q<32;q+) bq=aq+50; fq=cq+50; AnsiString an; an=bq;an+=" " an+="," an+=" " an+=fq;ListBox2->Items->Add(an);/lon

8、g int num32,numc32,num132,numc132 ;int y8; double centR32,sum32,sumc32,centRc32,dminc1000,dmin1000,centR132,sum132 ,sumc132,centRc132;void _fastcall TForm1:Button3Click(TObject *Sender) ListBox3->Clear();long int Indexa,Indexb,d,R,q,e,Indexc,Rc;long double D, Dn,sumd,sumdc,dc,Dc;R=0;d=0;e=1;sumd=

9、0;D=0;Dn=0;Indexc=0;Rc=0;dc=0;sumdc=0;Dc=0; for(q=0;q+;q<32) / 初始化数组 numq=0; sumq=0;centRq=0; sumcq=0; numcq=0;centRq=0; centRcq=0;设置布尔型 tag 用于控制循环bool tag = true; / while(tag)for(Indexa=0;Indexa<1000;Indexa+) / bool isFirst = true;for(Indexb=0;Indexb<32;Indexb+) d=fabs(aIndexa-bIndexb)* (a

10、Indexa-bIndexb)+(cIndexa-fIndexb)*(cIndexa-fIndexb); if(isFirst) dminIndexa = d; / isFirst = false; if(d<=dminIndexa) dminIndexa=d;R=Indexb; / if(d=0) break; sumR+=aIndexa; / sum1R+=cIndexa; numR+; / sumd+=dminIndexa; D=sumd/1000;for(R=0;R<32;R+) centRR=sumR/numR;centR1R=sum1R/numR; for(Indexa

11、=0;Indexa<1000;Indexa+) /bool isFirst=true; for(Indexc=0;Indexc<32;Indexc+) double给 d 赋初值/最邻近原则双层循环让 a 中所有元素遍历 b 中的元素将训练矢量划分到最近的码书内计算每个胞腔内元素的总和计算每个胞腔内元素的个数/计算 a 中 1000 个元素的最小失真的和/计算平均失真求质心数组centR双层循环让 a 遍历执质心中的元素dc=(aIndexa-centRIndexc)*(aIndexa-centRIndexc)+(cIndexa-centR1Indexc)*(cIndexa-cen

12、tR1Indexc);/ 计算新的失真 if(isFirst) dmincIndexa=dc; isFirst=false;if(dc<=dmincIndexa) dmincIndexa=dc; Rc=Indexc; / sumcRc+=aRc; sumc1Rc+=cRc;sumdc+=dmincIndexa; numcRc+; Dc=sumdc/1000;Dn=fabs(D-Dc)/Dc);/最邻近原则将训练矢量划分到最近的码书内/if(Dn<=e)/ 与给的的阈值 是 就把值输出 把变量的值放进去 下一次循环做准备 tag=false; / tag = false ListBo

13、x3->Clear();AnsiString an; int rr;for(int r=0;r<32;r+) / an=r;an+=" 号码字 " an+=": " ;计算新的平均失真 计算上一次平均失真与这一次平均失真的下降程度 e 相比 看是否符合条件 否取如果是 就把 Tag 赋值 false已经得到需要的结果 =true 说明 结果还不是需要的输出最优码书an+=centRr; an+=" " an+="," an+=" " an+=centR1r; ListBox3->

14、;Items->Add(an); else / 如果不符合则以得到的质心为新的码书for(Rc=0;Rc<32;Rc+) bRc=centRRc; fRc=centR1Rc;/令质心为新码书tag=true; /int N;void _fastcall TForm1:Edit1Change(TObject *Sender) N =atoi(this->Edit1->Text.c_str(); /从 Edit1 中读取所输入的数int N1;void _fastcall TForm1:Edit2Change(TObject *Sender) N1=atoi(this-&g

15、t;Edit2->Text.c_str();/void _fastcall TForm1:Button4Click(TObject *Sender) int R=0; double dm=0,dmm=0; bool isFirst=true;for(int r=0;r<32;r+)dmm=(N-centRr)*(N-centRr)+(N1-centR1r)*(N1-centR1r); / if(isFirst) / dm=dmm; isFirst=false;else if(dmm<dm) dm=dmm; / R=r; /初始化最小失真 dm得到最小失真 得到所输入数在第几个

16、胞腔内计算失真Memo1->Clear();AnsiString an;an=R;an+=" 号码书 "an+=": " an+=centRR;an+=" "an+=","an+=" "an+=centR1R;an+=" 索引号为 " for(int j=0;j<8;j+)yj=R%2 ;R=R/2;for(int j=7;j>=0;j-) an+=yj;在Memo仲输出所对应的码字Memo1->Lines->Add(an); /void _fastcall TForm1:Button7Click(TObject *Sender) ListBox1->Clear();ListBox2->Clear(); ListBox3->Cle

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论