⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 algorithm.cpp

📁 模式识别HK分类算法 vc下dos程序
💻 CPP
字号:
// Algorithm.cpp: implementation of the CAlgorithm class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "HK.h"
#include "Algorithm.h"
#include "iostream.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CAlgorithm::CAlgorithm()
{

}

CAlgorithm::~CAlgorithm()
{

}



void CAlgorithm::Process()//算法流程
{
	//确定模式数目
	cout<<"请输入第一类模式个数:";
	cin>>patnum1;
	cout<<"请输入第二类模式个数:";
	cin>>patnum2;
//	cout<<endl;

	//输入模式向量并将模式符号规范化生成增广模式矩阵
	int dim=patnum1+patnum2;	
	X.SetSize(dim,3);
	cout<<"请输入第一类模式:";//<<endl;
	for(int i=1;i<=patnum1;i++)
	{
		cin>>X(i,1)>>X(i,2);
		X(i,3)=1;
	}
//	cout<<endl;
	cout<<"请输入第二类模式:";//<<endl;
	for(i=patnum1+1;i<=dim;i++)
	{
		cin>>X(i,1)>>X(i,2);
		X(i,1)=-X(i,1);
		X(i,2)=-X(i,2);
		X(i,3)=-1;
	}
	cout<<"X 矩阵:"<<endl;
	X.Display();
	X_i.SetSize(3,dim);
	b.SetSize(dim,1);
	w.SetSize(dim,1);

	//计算伪逆矩阵
	X_i=!(~X*X)*~X;
	cout<<"X伪逆矩阵:"<<endl;
	X_i.Display();

	//赋b(0)初始值
	for(i=1;i<=dim;i++)
	{
		b(i,1)=1;
	}
	p=1;
	k=0;
	
	CMatrix e_old(dim,1);
	CMatrix comp(dim,1);
	CMatrix temp(dim,1);
	bool count;

	//开始循环
	while(1)
	{

		//计算w,e
		w=X_i*b;
		e=X*w-b;
		cout<<"e 误差矩阵:"<<endl;

		e.Display();

		if(e==comp)//判断误差为零,退出循环
			break;
		if(e<comp)//判断误差全为负,退出循环
			break;
		count=0;
		for(int i=1;i<=dim;i++)
		{
			if(e_old(i,1)<0)
				if(e(i,1)<0)
					count=1;
				else count=0;
		}
		if(count==1)
			break;
		//判断负值停止变化,退出循环
		e_old=e;
//		cout<<"test  e"<<endl;
//		e.Display();
		
		//修正w,b
		w=w+p*X_i*(e+Abs(e));

//		cout<<"test  e"<<endl;
//		Abs(e).Display();
		cout<<"w:"<<endl;
		w.Display();
		b=b+p*(e+Abs(e));
		k++;
	}
	//显示w
	cout<<"w向量:"<<endl;
	w.Display();

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -