📄 231.cpp
字号:
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <iostream.h>
#include <math.h>
#define n 6
#define m 30
#define d 3
//样本结构
struct sample {
int x[d];
int cl;
};
//势函数标识与索引结构
struct func {
int symbol;
int index;
};
struct shi{
int sub[3];
};
//函数声明
void shifunc();
void ceshi(int x1, int x2, int x3);
struct shi lei[2];
struct func ftbl[m];
int k,r=-1,tag=1,i,j;
double g=0,temp;
struct sample s[10];//={{1,2,5,1},{1,1,2,1},{3,3,6,1},{5,6,10,2},{7,6,11,2},{8,7,12,2}};
const char FILE_NAME[] = "io.txt";
void main()
{
int count=0;
FILE *fp;
int ch,ch2;
int curr;
//打开样本文件
if((fp=fopen(FILE_NAME,"rb"))==NULL){
std::cerr<<"很遗憾!无法打开文件-> "<<FILE_NAME<<" -_-\n";
exit(0);
}
//打印样本
i=0;
cout<<"从"<<FILE_NAME<<"读取样本....\n";
while(i<n){
cout<<"样本"<<i+1<<":\t";
for(int iii=0;iii<4;++iii){
ch=fgetc(fp);
ch2=fgetc(fp);
//个位与十位
if(ch2==' ')
curr=ch-'0';
else
curr=(ch-'0')*10+ch2-'0';
cout<<curr<<" ";
if((iii+1)%4==0) cout<<"\n";
if(iii==3)
s[i].cl=curr;//类别
else
s[i].x[iii]=curr;//x1,x2,x3
}
++i;
++count;
}
//cout<<"样本个数:from "<<FILE_NAME<<" is "<<count<<"\n";
fclose(fp);
cout<<"\n\n\n样本输出:\n";
for(i=0;i<n;++i){
for(j=0;j<4;++j)
{
if(j==3)
cout<<s[i].cl;
else cout<<s[i].x[j];
cout<<" ";
if((j+1)%4==0) cout<<"\n";
}
}
shifunc();
ceshi(2,3,5);
ceshi(6,7,10);
int q,w,e;
while(1){
cout<<"NEW:";
cin>>q>>w>>e;
ceshi(q,w,e);
}
for (int o=0;o<2;o++)
{
for(int p=0;p<3;p++)
cout<<lei[o].sub[p]<<"\t";
cout<<"\n";
}
// int i=2;
// cout<<sqr(i)<<endl;
return;
}
void shifunc()
{
while(tag==1)
{ tag=0;
for(k=0;k<n;k++)
{
if(r==-1){r++;
ftbl[r].symbol=1;
ftbl[r].index=0;
continue;
}
else{g=0;
for(i=0;i<=r;i++)
{
temp=0;
for(j=0;j<d;j++)
temp+=(s[k].x[j]-s[ftbl[i].index].x[j])*(s[k].x[j]-s[ftbl[i].index].x[j]);
g+=ftbl[i].symbol*exp(-temp);
}
if((g>0 && s[k].cl==1)||(g<0&&s[k].cl==2))continue;
else{
r++;ftbl[r].index=k;tag=1;
if(g>0 && s[k].cl==2)
ftbl[r].symbol=-1;
else if(g<0&&s[k].cl==1)
ftbl[r].symbol=1;
}
}
}
}
cout<<"势函数:\n";
system("color 6");
for(i=0;i<=r;i++)
{
if(ftbl[i].symbol==1)
if(i==0)cout<<"exp{-[(x1";
else cout<<"+exp{-[(x1";
else
cout<<"-exp{-[(x1";
if(s[ftbl[i].index].x[0]>0)
{
cout<<"-"<<s[ftbl[i].index].x[0]<<")^2+(x2";
lei[i].sub[0]=s[ftbl[i].index].x[0];
//cout<<lei[i].sub[0]<<"\n";
}
else if(s[ftbl[i].index].x[0]<0)
{
cout<<"+"<<-s[ftbl[i].index].x[0]<<")^2+(x2";
lei[i].sub[0]=s[ftbl[i].index].x[0];
}
else cout<<")^2+(x2";
if(s[ftbl[i].index].x[1]>0)
{
cout<<"-"<<s[ftbl[i].index].x[1]<<")^2+(x3";
lei[i].sub[1]=s[ftbl[i].index].x[1];
}
else if(s[ftbl[i].index].x[1]<0)
{
cout<<"+"<<-s[ftbl[i].index].x[0]<<")^2+(x3";
lei[i].sub[1]=s[ftbl[i].index].x[1];
}
else cout<<")^2+(x2";
if(s[ftbl[i].index].x[2]>0)
{
cout<<"-"<<s[ftbl[i].index].x[2]<<")^2]}";
lei[i].sub[2]=s[ftbl[i].index].x[2];
}
else if(s[ftbl[i].index].x[2]<0)
{
cout<<"+"<<-s[ftbl[i].index].x[0]<<")^2]}";
lei[i].sub[2]=s[ftbl[i].index].x[2];
}
else cout<<")^2]}";
}
cout<<"\n";
}
void ceshi(int x1, int x2, int x3)
{
int rs, rs1, rs2;
rs1=-((x1-1)*(x1-1)+(x2-2)*(x2-2)+(x3-5)*(x3-5));
//rs1=-((x1-lei[0].sub[0])*(x1-lei[0].sub[0])+(x2-lei[0].sub[1])*(x2-lei[0].sub[1])+(x3-lei[0].sub[2])*(x3-lei[0].sub[2]));
rs2=-((x1-5)*(x1-5)+(x2-6)*(x2-6)+(x3-10)*(x3-10));
//rs1=-((x1-lei[1].sub[0])*(x1-lei[1].sub[0])+(x2-lei[1].sub[1])*(x2-lei[1].sub[1])+(x3-lei[1].sub[2])*(x3-lei[1].sub[2]));
rs=rs1-rs2;
if(rs>0)
cout<<"新样本:"<<x1<<"\t"<<x2<<"\t"<<x3<<"\t"<<"属于样本类1\n";
else if(rs<0)
cout<<"新样本:"<<x1<<"\t"<<x2<<"\t"<<x3<<"\t"<<"属于样本类2\n";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -