📄 dlg_zhishu.cpp
字号:
// Dlg_zhishu.cpp : implementation file
//
#include "stdafx.h"
#include "dataanalisis.h"
#include "Dlg_zhishu.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlg_zhishu dialog
CDlg_zhishu::CDlg_zhishu(CWnd* pParent /*=NULL*/)
: CDialog(CDlg_zhishu::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlg_zhishu)
//}}AFX_DATA_INIT
}
void CDlg_zhishu::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlg_zhishu)
DDX_Control(pDX, IDC_EDIT_zpy, m_zpy);
DDX_Control(pDX, IDC_EDIT_zpx, m_zpx);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlg_zhishu, CDialog)
//{{AFX_MSG_MAP(CDlg_zhishu)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlg_zhishu message handlers
double minmeax=0,minmeay=0;
double predictx,predicty;//预测值
double zhishupinghua(double x3[],double y3[],int n);
void CDlg_zhishu::OnOK()
{
// TODO: Add extra validation here
extern int n;
extern double x3[],y3[];
char cResult1[10];
char cResult2[10];
zhishupinghua(x3,y3,n);
_gcvt(predictx,10,cResult1);
GetDlgItem(IDC_EDIT_zpx)->SetWindowText(cResult1);
_gcvt(predicty,10,cResult2);
GetDlgItem(IDC_EDIT_zpy)->SetWindowText(cResult2);
//CDialog::OnOK();
}
//////////////////////////////////////////////////////////////////
/////指数平滑模块/////
const int M=100;
double meax[M],meay[M];
double predictX[M],predictY[M];//数组存储预测值
double MEA(double s[],double t[],int n,double a6);
double zhishupinghua(double x3[],double y3[],int n)
{
double a6;
a6=0.25; MEA(x3,y3,n,a6);
a6=0.5; MEA(x3,y3,n,a6);
a6=0.75; MEA(x3,y3,n,a6);
minmeay=meay[0];
if(minmeay<meay[1]) minmeay=meay[1];//比较meay取最小值以判断a6的值
if(minmeay<meay[2]) minmeay=meay[2];
predictX[0]=(x3[1]+x3[2]+x3[3])/3;
predictY[0]=(y3[1]+y3[2]+y3[3])/3;
if(minmeay==meay[0])//根据合适的a6求出预测值
{
a6=0.25;
for(int i=1;i<=n;i++)
{
predictX[i]=a6*x3[i-1]+(1-a6)*predictX[i-1];
predictY[i]=a6*y3[i-1]+(1-a6)*predictY[i-1];
}
predictx=predictX[n];
predicty=predictY[n];
}
if(minmeay==meay[1])//根据合适的a6求出预测值
{
a6=0.5;
for(int i=1;i<=n;i++)
{
predictX[i]=a6*x3[i-1]+(1-a6)*predictX[i-1];
predictY[i]=a6*y3[i-1]+(1-a6)*predictY[i-1];
}
predictx=predictX[n];
predicty=predictY[n];
}
if(minmeay==meay[2])//根据合适的a6求出预测值
{
a6=0.75;
for(int i=1;i<=n;i++)
{
predictX[i]=a6*x3[i-1]+(1-a6)*predictX[i-1];
predictY[i]=a6*y3[i-1]+(1-a6)*predictY[i-1];
}
predictx=predictX[n];
predicty=predictY[n];
}
return predictx;
return predicty;
}
///////////////////////////////////////////////////////////////////////////////////
///////计算mea[]的值////////
int q=0;
double MEA(double s[],double t[],int n,double a6)
{
double X[M],Y[M];//数组X[N]和Y[N]存储Xt和Yt的预测值
double sumx=0,sumy=0;
X[0]=(s[1]+s[2]+s[3])/3;
Y[0]=(t[1]+t[2]+t[3])/3;
for(int i=1;i<=n;i++)
{
X[i]=a6*s[i-1]+(1-a6)*X[i-1];
Y[i]=a6*t[i-1]+(1-a6)*Y[i-1];
}
for(int j=0;j<n;j++)
{
sumx+=fabs(s[j]-X[j]);
sumy+=fabs(s[j]-Y[j]);
}
meax[q]=sumx/n;
meay[q++]=sumy/n;
return meax[M];
return meay[M];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -