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

📄 feedmap.cpp

📁 神经网络中的神经元代码
💻 CPP
字号:
// Feedmap.cpp : implementation file
//

#include "stdafx.h"
#include "neuro.h"
#include "Feedmap.h"
#include"math.h"

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

/////////////////////////////////////////////////////////////////////////////
// CFeedmap dialog


CFeedmap::CFeedmap(CWnd* pParent /*=NULL*/)
	: CDialog(CFeedmap::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFeedmap)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CFeedmap::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFeedmap)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CFeedmap, CDialog)
	//{{AFX_MSG_MAP(CFeedmap)
	ON_BN_CLICKED(ID_Plot, OnPlot)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFeedmap message handlers



void CFeedmap::OnPlot() 
{
	Invalidate();
	data1=(CEdit*)GetDlgItem(IDC_EDIT1);
	data2=(CEdit*)GetDlgItem(IDC_EDIT2);
	data3=(CEdit*)GetDlgItem(IDC_EDIT3);
	data4=(CEdit*)GetDlgItem(IDC_EDIT4);
	data5=(CEdit*)GetDlgItem(IDC_EDIT5);
	
	
	data1->GetWindowText(frnadata1);
	data2->GetWindowText(frnadata2);
	data3->GetWindowText(frnadata3);
	data4->GetWindowText(frnadata4);
	data5->GetWindowText(frnadata5);
	double a1=atof(frnadata1);
    double a2=atof(frnadata2);
	double a3=atof(frnadata3);
	double a4=atof(frnadata4);
	double a5=atof(frnadata5);
double F[10000];
double T[10000];
double num[3]={0,0.0018,0.0017};
double den[3]={1.0000,-1.9160,0.9194};
double x[2]={0,0};
double y[10]={0,0,0,0,0,0,0,0,0,0};
double e[10]={0,0,0,0,0,0,0,0,0,0};
double u[10]={0,0,0,0,0,0,0,0,0,0};
double Fc[10]={0,0,0,0,0,0,0,0,0,0};
double f[10]={0,0,0,0,0,0,0,0,0,0};
int n=900;
double d[2]={20,20};
double w[2]={0.1,0.1};
int t;
double E;
double EC;
double Uf;
double delte;
double yr[10000];
double ppp;
double kf=1533.3;
double p=0.95;
for(t=0;t<10000;t++)
T[t]=0;
for(t=0;t<10000;t++)
{	yr[t]=1000;
if (t<2000)
    ppp=1.0;
     else if (t<4000)
    ppp=1.5;
   else if (t<6000)
    ppp=2.0;
    else if (t<8000)
    ppp=2.5;
  else 
    ppp=3.0;
   e[0]=yr[t]-Fc[0];
   delte=e[0]-e[1];
   E=floor(a2*e[0]+0.5);
   EC=floor(a3*delte+0.5);
   Uf=a4*floor(a5*E+(1-a5)*EC+0.5);
   x[0]=Uf;x[1]=x[1]+a1*Uf;
     for (int z=9;z>=1;z--)
	 {
      u[z]=u[z-1];
      y[z]=y[z-1];
      f[z]=f[z-1];
      e[z]=e[z-1];
  	 }
    double s=0;double ss=0;
    for (int i=0;i<=1;i++)
	{
        s=s+w[i]*x[i];
        ss=ss+fabs(w[i]);
    }
    if (ss==0)
	{ss=0.001;}
        
        u[0]=a1*s/ss;                                                            

   y[0]=-den[1]*y[1]-den[2]*y[2]+num[1]*u[1]+num[2]*u[2]; 
   f[0]=60*y[0]/n;
   Fc[0]=ppp*kf*pow(f[0],p);
   for (int j=0;j<=1;j++)
   {w[j]=w[j]+d[j]*(yr[t]-y[0])*x[j];
   }
   F[t]=f[0];

}
for(t=0;t<10000;t++)
{T[t+1]=T[t]+0.001;}
 CPaintDC dc(this); // device context for painting
	CDC *pDC=GetDC();
   
	double data_x[10000]; 
	double data_y[10000];
	for(int j=0;j<10000;j++)
	{data_x[j]=T[j];
	data_y[j]=F[j];
	}
	
		//double initX[10]={1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
       //double initY[10]={0.5,2.0,2.8,4.0,5.6,6.0,7.0,9.4,13.8,23.4};
       //分别取得X和Y最大值,最小值
       double maxX=data_x[0];
       double minX=data_x[0];
       double maxY=data_y[0];
       double minY=data_y[0];

       for(int i=0;i<10000;i++)
       {
              if(data_x[i]>maxX)
                     maxX=data_x[i];
              if(data_x[i]<minX)
                     minX=data_x[i];
              if(data_y[i]>maxY)
                     maxY=data_y[i];
              if(data_y[i]<minY)
                     minY=data_y[i];
       }
       //如果原点必须在X轴上,加上下面2行,否则注释掉
       if(minX>0)
              minX=0;
       //如果原点必须在Y轴上,加上下面2行,否则注释掉
       if(minY>0)
              minY=0;
       //确定图象显示大小
	   	   
       //确定坐标图四周预留的空白大小
	   for(int i1=0;i1<10000;i1++)
	   {
	   	data_y[i1]=data_y[i1]*10;
	   }
     
       int width=300;
       int height=300;
       //确定坐标图四周预留的空白大小
       const int mytop=60;
    const int mybottom=10;
    const int myleft=60;
    const int myright=10;
       //确定X,Y轴每单位显示宽度
       double intervalX=(width-myleft-myright)/(maxX-minX);
       double intervalY=(height-mybottom-mytop)/(maxY-minY);
       //绘制曲线。由于绘图坐标的Y轴是向下延升,所以这里每个点的Y值是用
       //图象高度减去y值大小。
       pDC->MoveTo(int(myleft+(data_x[0]-minX)*intervalX),int(height-(mybottom+(data_y[0]-minY)*intervalY)));
       for(i=0;i<10000;i++)
       {
              pDC->LineTo(int(myleft+(data_x[i]-minX)*intervalX), 
                     int(height-(mybottom+(data_y[i]-minY)*intervalY)));
       }
       //绘制X,Y轴
       //X轴从图形区域最左端到最右端
       double bottomY=0;
       double leftX=0;
       //bottomY表示X轴的y值,leftX表示Y轴的x值
       if(minY>0)
             bottomY=minY;
       if(minX>0)
              leftX=minX;
       pDC->MoveTo(int(myleft),int(height-(mybottom+(bottomY-minY)*intervalY)));
       pDC->LineTo(int(width-myright),int(height-(mybottom+(bottomY-minY)*intervalY)));
       //Y轴从图形区域最底端到最顶端
       pDC->MoveTo(int(myleft+(leftX-minX)*intervalX),int(height-mybottom));
       pDC->LineTo(int(myleft+(leftX-minX)*intervalX),int(mytop));
       //确定显示刻度个数
       const int count=2;const int count1=5;
       //确定每个显示刻度之间的宽度
       double spaceX=(width-myleft-myright)/count;
       double spaceY=(height-mybottom-mytop)/count1;
       //绘制刻度和刻度值
       CString str;
       //X轴
       for(i=0;i<=count;i++)
       {
              str.Format("%.1f",minX+i*(maxX-minX+1)/count);
              pDC->MoveTo(int(myleft+spaceX*i),int(height-(mybottom+(bottomY-minY)*intervalY)));
              pDC->LineTo(int(myleft+spaceX*i),int(height-(mybottom+(bottomY-minY)*intervalY+5)));
              pDC->TextOut(int(myleft+spaceX*i-10),
              int(height-(mybottom+(bottomY-minY)*intervalY-5)),str);
       }
       //Y轴
       for(i=0;i<=count1;i++)
       {
              str.Format("%.1f",minY+i*(maxY-minY)/(10*count1));
              pDC->MoveTo(int(myleft+(leftX-minX)*intervalX),int(height-(mybottom+spaceY*i)));
              pDC->LineTo(int(myleft+(leftX-minX)*intervalX+5),int(height-(mybottom+spaceY*i)));
              pDC->TextOut(int(myleft+(leftX-minX)*intervalX-50),
              int(height-(mybottom+spaceY*i+8)),str);
       }
    //绘制X,Y轴的变量名
       pDC->TextOut((width-myleft)/2,height-5,"t/sec");
       pDC->TextOut(30,height/2,"f/mm/rev");
	 
	

}

⌨️ 快捷键说明

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