《模式识别》Fisher线性判别C++实现

Fisher线性判别C++实现
把王丽梅老师的《模式识别》里源码实现了一下
原书共11页代码,和同学分段写了一节课实现了
样本及源码文件已经上传zip
样本数据是老师给的

double sw[32][8][8];       //类内离差矩阵
double mj[32][8];     //模式均值矢量
double sww[8][8];     //类间离差矩阵

//#include "stdafx.h"
#include "math.h"
#include "conio.h"
#include <fstream>
#include <iomanip>
using namespace std;
#define PNUM 60

unsigned char dat[10][4][8][8][60]={
   
 {
   
  #include "..\\样本\\rmb00.txt"
 },
  {
   
  #include "..\\样本\\rmb01.txt"
 },
  {
   
  #include "..\\样本\\rmb02.txt"
 },
  {
   
  #include "..\\样本\\rmb03.txt"
 },
  {
   
  #include "..\\样本\\rmb04.txt"
 },
  {
   
  #include "..\\样本\\rmb05.txt"
 },
  {
   
  #include "..\\样本\\rmb06.txt"
 },
  {
   
  #include "..\\样本\\rmb07.txt"
 },
  {
   
  #include "..\\样本\\rmb08.txt"
 },
  {
   
  #include "..\\样本\\rmb09.txt"
 }
};
 
#define NUM 8


double Eucliden(double x[],double y[],int n)
{
   
 double d;
 d=0.0;
 for(int i=0;i<n;i++){
   
  d+=(x[i]-y[i])*(x[i]-y[i]);
 }
 d=sqrt(d);
 return d;
 } 


double Manhattan(double x[],double y[],int n)
{
   
 double d;
 d=0.0;
 for(int i=0;i<n;i++){
   
  d+=fabs(x[i]-y[i]);
 }
 return d;
}


double Chebyshev(double x[],double y[],int n)
{
   
 double d;
 d=0.0;
 for(int i=0;i<n;i++){
   
  if(fabs(x[i]-y[i])>d)
   d=fabs(x[i]-y[i]);
 } 
 return d;
}
 
 
 double Minkowski(double x[],double y[],int n,int m)
{
   
 double d;
 d=0.0;
 for(int i=0;i<n;i++){
   
  d+=(double)powf((float)(x[i]-y[i]),(float)m);
 }
 d=(double)powf((float)d,1.0f/m);
 return d;
}


double Mahalanobis(double x[],double y[],double matv1[8][8])
{
   
 double dx,dy;
 int i,j;
 
 dx=0.0;
 for(i=0;i<8;i++){
   
  dy=0.0;
  for(j=0;j<8;j++){
   
   dy+=matv1[i][j]*(x[j]-y[j]);
  }
  dx+=dy*(x[i]-y[i]);
 }
 return dx;
}
 
 
 void GetMatV(double V[8][8],int k)
{
   
 int i,j,m,n1,n2,n3;
 double xm[8],d,x,y;
 
 m=4*8*PNUM;
 for(i+0;i<8;i++){
   
  d=0;
  for(n1=0;n1<4;n1++){
   
   for(n2=0;n2<4;n2++){
   
    for(n3=0;n3<4;n3++){
   
     d+=(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值