📄 势函数.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 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 shihanshu()
{
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 2");
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";
else if(s[ftbl[i].index].x[0]<0)
cout<<"+"<<-s[ftbl[i].index].x[0]<<")^2+(x2";
else cout<<")^2+(x2";
if(s[ftbl[i].index].x[1]>0)
cout<<"-"<<s[ftbl[i].index].x[1]<<")^2+(x3";
else if(s[ftbl[i].index].x[1]<0)
cout<<"+"<<-s[ftbl[i].index].x[0]<<")^2+(x3";
else cout<<")^2+(x2";
if(s[ftbl[i].index].x[2]>0)
cout<<"-"<<s[ftbl[i].index].x[2]<<")^2]}";
else if(s[ftbl[i].index].x[2]<0)
cout<<"+"<<-s[ftbl[i].index].x[0]<<")^2]}";
else cout<<")^2]}";
}
cout<<"\n";
}
void main()
{
int count=0;
FILE *in_file;
int ch,ch2;
int curr;
in_file=fopen(FILE_NAME,"rb");
if(in_file==NULL){
std::cerr<<"Can not open "<<FILE_NAME<<"\n";
exit(0);
}
i=0;
while(i<n){
for(int iii=0;iii<4;++iii){
ch=fgetc(in_file);
ch2=fgetc(in_file);
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;
}
++i;
//if(ch==EOF)
//break;
++count;
}
cout<<"样本个数:from "<<FILE_NAME<<" is "<<count<<"\n";
fclose(in_file);
cout<<"样本输出:\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";
}
}
shihanshu();
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -