?? feedforward.cpp
字號:
//該函數(shù)實現(xiàn)分類的過程
/* 輸入?yún)?shù):
prototype -- 指向prototype部分的指針
N -- prototype部分的結(jié)點個數(shù)
exemplar -- 指向exemplar部分的指針
M -- exemplar部分的結(jié)點個數(shù)
sample -- 輸入模式
L -- 輸入模式的維數(shù)
輸出參數(shù):
輸入模式屬于的類號
*/
#include <math.h>
#include <stdio.h>
#include "FuzzyNN.h"
#include "tools.h"
int feedforward(ProtoNode *prototype,int N,ExemNode *exemplar,int M,FuzzyNum *sample,int L)
{
int i,j;
double *s;
s=new double[N+1];
mcheck(s);
//計算s1,s2,...,sN,并求其最大值
for(j=1;j<=N;j++)
{
s[j]=0;
for(i=1;i<=L;i++)
s[j]+=(coa(sample[i])-coa((prototype[j].w)[i]))*(coa(sample[i])-coa((prototype[j].w)[i]));
s[j]=s[j]/L;
s[j]=sqrt(s[j]);
s[j]=1-s[j];
}
double pmax; //s1,s2,...,sN中的最大值
int pindex; //最大值對應(yīng)的下標(biāo)
pmax=s[1];
pindex=1;
for(i=2;i<=N;i++)
if(s[i]>pmax)
{
pmax=s[i];
pindex=i;
}
//如果exemplar不為空的話,計算r1,r2,...,rM,并求其最大值
double emax=0; //r1,r2,...,rM中的最大值
int eindex=0; //最大值對應(yīng)的下標(biāo)
if(exemplar!=NULL)
{
double *r;
r=new double[M+1];
mcheck(r);
j=0;
ExemNode *p=exemplar;
int flag;
while(p!=NULL)
{
j++;
r[j]=0;
flag=1;
for(i=1;i<=L;i++)
if(!((p->v)[i].w1<=sample[i].w1 && (p->v)[i].w2>=sample[i].w2))
flag=0;
if(flag)
{
for(i=1;i<=L;i++)
r[j]+=(sample[i].w1-(p->v)[i].w1)*(sample[i].w1-(p->v)[i].w1)+(sample[i].w2-(p->v)[i].w2)*(sample[i].w2-(p->v)[i].w2);
r[j]=r[j]/L;
r[j]=sqrt(r[j]);
r[j]=2-r[j];
}
p=p->next;
}
emax=r[1];
eindex=1;
for(i=2;i<=M;i++)
if(r[i]>emax)
{
emax=r[i];
eindex=i;
}
delete []r;
}
if(exemplar==NULL)return pindex;
else
{
if(pmax>emax)return pindex;
else
{
ExemNode *p=exemplar;
for(i=1;i<eindex;i++)
p=p->next;
return p->classnum;
}
}
delete []s;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -