📄 sofmdview.cpp
字号:
//电子信息学院 20074228068040 ranee
//wujuan
// SOFMDView.cpp : implementation of the CSOFMDView class
//
#include "stdafx.h"
#include "SOFMD.h"
#include "SOFMDDoc.h"
#include "SOFMDView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSOFMDView
IMPLEMENT_DYNCREATE(CSOFMDView, CView)
BEGIN_MESSAGE_MAP(CSOFMDView, CView)
//{{AFX_MSG_MAP(CSOFMDView)
ON_COMMAND(IDM_SOFM, OnSofm)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSOFMDView construction/destruction
CSOFMDView::CSOFMDView()
{
// TODO: add construction code here
}
CSOFMDView::~CSOFMDView()
{
}
BOOL CSOFMDView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CSOFMDView drawing
void CSOFMDView::OnDraw(CDC* pDC)
{
CSOFMDDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CSOFMDView printing
BOOL CSOFMDView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CSOFMDView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CSOFMDView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CSOFMDView diagnostics
#ifdef _DEBUG
void CSOFMDView::AssertValid() const
{
CView::AssertValid();
}
void CSOFMDView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CSOFMDDoc* CSOFMDView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSOFMDDoc)));
return (CSOFMDDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CSOFMDView message handlers
void CSOFMDView::OnSofm()
{
// TODO: Add your command handler code here
zuobiaozhou(); //画坐标轴
fp=fopen("ranee.txt","w");
initw();
for(int i=0;i<m;i++)
for(int j=0;j<m;j++)
{
POINT X;
CClientDC dc(this);
X.x=200+W[0][i][j]*100;
X.y=200-W[1][i][j]*100;
dc.SetPixel(X,RGB(255,0,0) );
}
initu();
for(int ii=0;ii<p;ii++)
{
POINT Q;
CClientDC dc(this);
Q.x=200+U[ii][0]*100;
Q.y=400-U[ii][1]*100;
dc.SetPixel(Q,RGB(255,0,0) );
}
for(int t=0;t<T;t++) //循环
{
for(int l=0;l<p;l++)
{
//double d[M];//,dis[M];
double dmin=100;
int c0,c1;
for(int i=0;i<m;i++)
{
for(int j=0;j<m;j++)
{
//double a=W[i][0]*U[l][0]+W[i][1]*U[l][1]; //内积
double a=sqrt((U[l][0]-W[0][i][j])*(U[l][0]-W[0][i][j])+(U[l][1]-W[1][i][j])*(U[l][1]-W[1][i][j])); //欧距
//d[i]=sqrt(a);
if(a<dmin)
{
dmin=a;
c0=i;
c1=j;
}
}
//d1[i]=a;
}
double Ng=(Ng0*exp(-5*t/T));
double G=A*exp(-6.2*t/T);
// double Ng=Ng0*(1-t/T);
// double G=A*(1-t/T);
for(int j=0;j<m;j++)
for(int j1=0;j1<m;j1++)
for(int j2=0;j2<n;j2++)
if(fabs(j-c0)<Ng&&fabs(j1-c1)<Ng) //邻域调整
{
//double temp=W[j2][j][j1]+G*(U[l][j2]-W[j2][j][j1]);
// W[j2][j][j1]=temp;
W[j2][j][j1]=W[j2][j][j1]+G*(U[l][j2]-W[j2][j][j1]);
}
}
}
fprintf(fp,"最终权值:\n" );
//fprintf(fp,"\n");
for(int z=0;z<m;z++)
for(int z1=0;z1<m;z1++)
for(int x=0;x<n;x++)
{
fprintf(fp,"%f ",W[x][z][z1]);
}
for(int i0=0;i0<m;i0++)
for(int i1=0;i1<m;i1++)
{
POINT Y;
CClientDC dc(this);
Y.x=500+W[0][i0][i1]*200;
Y.y=300-W[1][i0][i1]*200;
CPen myPen;
dc.SelectObject(&myPen);
dc.SetPixel(Y,RGB(0,0,0) );
dc.Ellipse(Y.x-2,Y.y-2, Y.x+2,Y.y+2); //调整后w的位置画椭圆,便于观察
}
fclose(fp);
}
void CSOFMDView::zuobiaozhou()
{
CClientDC dc(this);
dc.MoveTo(200,100);
dc.LineTo (200,200);
dc.LineTo (300,200);
dc.TextOut(10,10,"sofm应用----ranee 40");
dc.TextOut (200,210,"初始权值输入");
dc.MoveTo(500,100);
dc.LineTo (500,300);
dc.LineTo (700,300);
dc.TextOut (500,310,"权值处理后");
dc.MoveTo(200,300);
dc.LineTo (200,400);
dc.LineTo (300,400);
dc.TextOut (200,410,"初始样本输入");
}
void CSOFMDView::initw()
{
fprintf(fp,"初始权值:" );
fprintf(fp,"\n");
srand((unsigned)time(NULL));
for(int j=0;j<n;j++)
{
for(int i=0;i<m;i++)
{
for(int k=0;k<m;k++)
{
W[j][i][k]=(double)rand()/0x7fff/10+0.45;
fprintf(fp," %f",W[j][i][k]);
//if(j%2==1)
// fprintf(fp,"\n");
}
}
}
}
void CSOFMDView::initu()
{
fprintf(fp,"\n");
fprintf(fp,"样本输入:" );
fprintf(fp,"\n");
srand((unsigned)time(NULL));
for(int j=0;j<p;j++)
for(int i=0;i<n;i++)
{
U[j][i]=(float)rand()/0x7fff;
fprintf(fp," %f",U[j][i]);
if(i%2==1)
fprintf(fp,"\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -