📄 zuoyeview.cpp
字号:
// ZuoYeView.cpp : implementation of the CZuoYeView class
//
#include "stdafx.h"
#include "ZuoYe.h"
#include "ZuoYeDoc.h"
#include "ZuoYeView.h"
#include <math.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CZuoYeView
IMPLEMENT_DYNCREATE(CZuoYeView, CView)
BEGIN_MESSAGE_MAP(CZuoYeView, CView)
//{{AFX_MSG_MAP(CZuoYeView)
ON_COMMAND(ID_Fun, OnFun)
ON_COMMAND(ID_Model, OnModel)
ON_COMMAND(ID_w_Quan, OnwQuan)
ON_COMMAND(ID_ModelCheck, OnModelCheck)
ON_COMMAND(ID_Guiyihua, OnGuiyihua)
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CZuoYeView construction/destruction
CZuoYeView::CZuoYeView()
{
// TODO: add construction code here
}
CZuoYeView::~CZuoYeView()
{
}
BOOL CZuoYeView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CZuoYeView drawing
void CZuoYeView::OnDraw(CDC* pDC)
{
CZuoYeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CZuoYeView printing
BOOL CZuoYeView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CZuoYeView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CZuoYeView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CZuoYeView diagnostics
#ifdef _DEBUG
void CZuoYeView::AssertValid() const
{
CView::AssertValid();
}
void CZuoYeView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CZuoYeDoc* CZuoYeView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CZuoYeDoc)));
return (CZuoYeDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CZuoYeView message handlers
void CZuoYeView::OnFun()
{
// TODO: Add your command handler code here
int i,j;
X=new double *[NUM];
if (X == NULL) //内存分配失败,终止运行
{
delete [] X;
}
for(i=0;i<NUM;i++)
{
X[i]=new double [WEISHU];
if(X[i] == NULL)
{
delete [] X[i];
}
}
y=new double [NUM];
if (y == NULL) //内存分配失败,终止运行
{
delete [] y;
}
for(i=0;i<NUM;i++)
{
for(j=0;j<WEISHU;j++){
X[i][j]=0;}
y[i]=0;
}
srand( (unsigned)time( NULL ) );
for(i=0;i<NUM;i++)
{
for(j=0;j<WEISHU;j++){
X[i][j]=myrand(-10.0,10.0);}
}
for(i=0;i<NUM;i++)
{
y[i]=0.001*(4-2.1*(X[i][0])*(X[i][0])+(X[i][0])*(X[i][0])*(X[i][0])*(X[i][0])/3)*(X[i][0])*(X[i][0])+3.2*(X[i][0])*(X[i][1])+0.012*(-4+4*(X[i][1])*(X[i][1]))*(X[i][1])*(X[i][1])+1.5*(X[i][0]);
}
// for(i=0;i<NUM;i++)
// y[i];
MessageBox("函数定义完成!");
}
double CZuoYeView::myrand(double a,double b)
{
double date;
date= rand();
date=a+date*(b-a)/32767;
return date;
}
void CZuoYeView::OnModel()
{
// TODO: Add your command handler code here
double *pianchaD,sum,pianjulibi,temp;
int i,j,k,kding1,kding;
yin_out=new double *[NUM];
if (yin_out == NULL) //内存分配失败,终止运行
{
delete [] yin_out;
}
for (i=0; i<NUM; i++)
{
yin_out[i] = new double[YINJIEDIAN];
if (yin_out[i] == NULL) //内存分配失败,终止运行,并释放已经分配的 部分内存
{
delete [] yin_out[i];
}
}
for(i=0;i<NUM;i++)
{
for(j=0;j<YINJIEDIAN;j++)
{
yin_out[i][j]=0;
}
}
Kk=1;
pianchaD=new double [YINJIEDIAN];
if(pianchaD==NULL){
delete [] pianchaD;}
for(i=0;i<YINJIEDIAN;i++)
pianchaD[i]=0;
yin=new double *[YINJIEDIAN];
if(yin==NULL){
delete [] yin;}
for(k=0;k<YINJIEDIAN;k++){
yin[k]=new double [WEISHU];
if(yin[k]==NULL){
delete [] yin[k];}
}
for(i=0;i<YINJIEDIAN;i++){
for(j=0;j<WEISHU;j++){
yin[i][j]=0;}
}
for(j=0;j<WEISHU;j++)
yin[0][j]=X[0][j];
for(i=0;i<NUM;i++)
{
sum=0;
for(k=0;k<Kk;k++)
{
sum=0;
for(j=0;j<WEISHU;j++)
sum=sum+(X[i][j]-yin[k][j])*(X[i][j]-yin[k][j]);
pianchaD[k]=sqrt(sum);
}
temp=pianchaD[0];
kding1=0;
for(k=0;k<Kk;k++)
{
if(temp>pianchaD[k]){
temp=pianchaD[k];
kding1=kding;
kding=k;}
else
kding=kding1;
}
if(temp<=DISTANCE){
pianjulibi=temp/DISTANCE;
for(j=0;j<WEISHU;j++)
yin[kding][j]=pianjulibi*yin[kding][j]+X[i][j]*(1-pianjulibi);}
else if(temp>DISTANCE)
{
Kk=Kk+1;
for(j=0;j<WEISHU;j++)
yin[Kk-1][j]=X[i][j];
}
}
/* for(i=0;i<NUM;i++)
{
for(k=0;k<Kk;k++)
{
sum=0;
for(j=0;j<WEISHU;j++){
sum=sum+(X[i][j]-yin[k][j])*(X[i][j]-yin[k][j]);}
yin_out[i][k]=exp(-sum/(2*DISTANCE*DISTANCE));
}
}*/
MessageBox("网络建模完成!");
}
void CZuoYeView::OnwQuan()
{
// TODO: Add your command handler code here
int i,j,k;
double **tempfi,*tempy,sum=0,temp;
w_quan=new double [Kk];
if (w_quan == NULL) //内存分配失败,终止运行
{
delete [] w_quan;
}
for(i=0;i<Kk;i++)
w_quan[i]=0;
tempfi=new double *[Kk];
if(tempfi==NULL){
delete [] tempfi;}
for(k=0;k<Kk;k++){
tempfi[k]=new double [Kk*2];
if(tempfi[k]==NULL){
delete [] tempfi[k];}
}
for(i=0;i<Kk;i++){
for(j=0;j<Kk*2;j++){
tempfi[i][j]=0;}
}
for(i=0;i<Kk;i++){
j=(Kk+i);
tempfi[i][j]=1;}
tempy=new double [Kk];
if(tempy==NULL){
delete [] tempy;}
for(i=0;i<Kk;i++)
{
tempy[i]=0.001*(4-2.1*(yin[i][0])*(yin[i][0])+(yin[i][0])*(yin[i][0])*(yin[i][0])*(yin[i][0])/3)*(yin[i][0])*(yin[i][0])+3.2*(yin[i][0])*(yin[i][1])+0.012*(-4+4*(yin[i][1])*(yin[i][1]))*(yin[i][1])*(yin[i][1])+1.5*(yin[i][0]);
tempy[i];
}
for(i=0;i<Kk;i++)
{
for(k=0;k<Kk;k++)
{
sum=0;
for(j=0;j<WEISHU;j++){
sum=sum+(yin[i][j]-yin[k][j])*(yin[i][j]-yin[k][j]);}
tempfi[i][k]=exp(-sum/(2*DISTANCE*DISTANCE));
}
}
for(i=1;i<Kk;i++){
if(tempfi[i][0]!=0){
for(k=0;k<Kk;k++)
tempfi[0][k]=tempfi[0][k]+tempfi[i][k];
break;}
else
i++;
}
//////////////Kk维单位矩阵求矩阵逆
for(i=0;i<Kk;i++)
{
k=i;
temp=tempfi[i][k];
for(j=i;j<(Kk*2-1);j++)
{
tempfi[i][j]=tempfi[i][j]/temp;
}
for(k=(i+1);k<Kk;k++)
{
temp=tempfi[k][i];
for(j=i;j<(Kk*2-1);j++){
tempfi[k][j]=tempfi[k][j]-tempfi[i][j]*temp;}
}
}
for(i=0;i<Kk;i++)
for(k=0;k<(Kk*2-1);k++)
tempfi[i][k];
for(i=(Kk-1);i>=0;i--){
for(k=(i-1);k>=0;k--){
temp=tempfi[k][i];
for(j=i;j<(Kk*2-1);j++){
tempfi[k][j]=tempfi[k][j]-tempfi[i][j]*temp;}
}
}
for(i=0;i<Kk;i++)
for(k=Kk;k<(Kk*2-1);k++)
tempfi[i][k];
for(i=0;i<Kk;i++)
for(j=Kk;j<(Kk*2-1);j++)
w_quan[i]=w_quan[i]+tempfi[i][j]*tempy[j-Kk];
for(i=0;i<Kk;i++)
w_quan[i];
/* w_quan=new double [YINJIEDIAN];
if (w_quan == NULL) //内存分配失败,终止运行
{
delete [] w_quan;
}
srand( (unsigned)time( NULL ) );
for(i=0;i<YINJIEDIAN;i++){
w_quan[i]=myrand(0,1);}
for(i=0;i<NUM;i++)
{
A=0;
for(k=0;k<Kk;k++){
A=A+yin_out[i][k]*yin_out[i][k];}
tempy=0;
for(k=0;k<Kk;k++){
tempy=tempy+yin_out[i][k]*w_quan[k];}
for(k=0;k<Kk;k++){
w_quan[k]=w_quan[k]+beita*(y[i]-tempy)*yin_out[i][k]/A;}
}*/
MessageBox("权值调整成功!");
}
void CZuoYeView::OnModelCheck()
{
// TODO: Add your command handler code here
int i ,j,k;
double *tempy,sum=0;
tempy= new double[CHECKNUM];
if (tempy == NULL) //内存分配失败,终止运行,并释放已经分配的 部分内存
{
delete [] tempy;
}
for(i=0;i<CHECKNUM;i++){
tempy[i]=0;}
srand( (unsigned)time( NULL ) );
for(i=0;i<CHECKNUM;i++)
{
for(j=0;j<WEISHU;j++){
X[i][j]=myrand(-8.0,8.0);}
}
for(i=0;i<CHECKNUM;i++)
{
y[i]=0.001*(4-2.1*(X[i][0])*(X[i][0])+(X[i][0])*(X[i][0])*(X[i][0])*(X[i][0])/3)*(X[i][0])*(X[i][0])+3.2*(X[i][0])*(X[i][1])+0.012*(-4+4*(X[i][1])*(X[i][1]))*(X[i][1])*(X[i][1])+1.5*(X[i][0]);
}
/* for(i=0;i<CHECKNUM;i++)
{
for(j=0;j<WEISHU;j++){
X[i][j]=(X[i][j]+10)/20;}
}*/
for(i=0;i<CHECKNUM;i++)
{
for(k=0;k<Kk;k++)
{
sum=0;
for(j=0;j<WEISHU;j++){
sum=sum+(X[i][j]-yin[k][j])*(X[i][j]-yin[k][j]);}
yin_out[i][k]=exp(-sum/(2*DISTANCE*DISTANCE));
}
}
for(i=0;i<CHECKNUM;i++)
{
for(k=0;k<Kk;k++){
tempy[i]=tempy[i]+yin_out[i][k]*w_quan[k];}
}
/* for(i=0;i<CHECKNUM;i++)
{
tempy[i]=tempy[i]*(maxy-miny)+miny;
}
*/
CClientDC dc(this);
dc.TextOut(20,400,"0");
dc.MoveTo(30,400);
dc.LineTo(30,20);
dc.LineTo(25,25);
dc.MoveTo(30,20);
dc.LineTo(35,25);
dc.MoveTo(30,400);
dc.LineTo(30,750);
///////////////////////////////
dc.MoveTo(30,400);
dc.LineTo(900,400);
dc.LineTo(895,395);
dc.MoveTo(900,400);
dc.LineTo(895,405);
for(i=1;i<10;i++)
{
dc.MoveTo(30+i*88,400);
dc.LineTo(30+i*88,395);
CString str;
str.Format("%d",i*1);
dc.TextOut(20+i*88,406,str);
}
CString str;
str="数据序列";
dc.TextOut(800,426,str);
for(i=1;i<=5;i++)
{
dc.MoveTo(30,400-i*100);
dc.LineTo(35,400-i*100);
CString str;
str.Format("%d",i*100);
dc.TextOut(5,395-i*100,str);
}
// CString str="y值输出比较";
// dc.TextOut(5,395-i*100,str);
dc.MoveTo(30,400-int(tempy[0]));
for(i=0,j=1;i<10;i++)
{
CPen pen(PS_SOLID,1,RGB(0,0,255));
CPen *pOldpen=dc.SelectObject(&pen);
dc.LineTo((30+88*j),(400-int(tempy[i])));
j++;
}
dc.MoveTo(30,400-int(y[0]));
for(i=0,j=1;i<10;i++)
{
CPen pen(PS_SOLID,1,RGB(225,0,0));
CPen *pOldpen=dc.SelectObject(&pen);
dc.LineTo((30+88*j),400-int(y[i]));
j++;
}
}
void CZuoYeView::OnGuiyihua()
{/*
// TODO: Add your command handler code here
int i,j;
maxy=0;
miny=0;
for(j=0;j<WEISHU;j++){
j=WEISHU;
maxy=y[0];
miny=y[0];
for(i=0;i<NUM;i++){
if(maxy<y[i]){
maxy=y[i];}
if(miny>y[i]){
miny=y[i];}
}
}
for(i=0;i<NUM;i++)
{
for(j=0;j<WEISHU;j++)
{
X[i][j]=(X[i][j]+10)/20;
}
j=WEISHU;
y[i]=(y[i]-miny)/(maxy-miny);
}*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -