首页 范文大全 古典文学 职场知识 中国文学 公文书信 外国名著 寓言童话 百家讲坛 散文/诗歌 美文欣赏 礼仪知识 民俗风情
  • 工作总结
  • 工作计划
  • 心得体会
  • 竞聘演讲
  • 会议发言
  • 爱国演讲
  • 就职演说
  • 开业开幕
  • 思想学习
  • 征文演讲
  • 经验材料
  • 述职报告
  • 调研报告
  • 工作汇报
  • 年终总结
  • 申报材料
  • 学习体会
  • 企划方案
  • 活动方案
  • 技巧经验
  • 模板范例
  • 思想宣传
  • 经济工作
  • 工作报告
  • 组织人事
  • 反腐倡廉
  • 慰问贺电
  • 先进事迹
  • 思想汇报
  • 入党申请书
  • 党会发言
  • 先进性教育
  • 入团申请书
  • 个人简历
  • 演讲稿
  • 调查报告
  • 实习报告
  • 和谐社会
  • 观后感
  • 读后感
  • 作文范文
  • 自我鉴定
  • 讲话稿
  • 自查报告
  • 面向对象编程技术大作业-阿伦方差设计报告

    时间:2021-02-27 12:03:58 来源:蒲公英阅读网 本文已影响 蒲公英阅读网手机站

    相关热词搜索:阿伦 方差 作业

    面向对象编程技术大作业-阿伦方差设计报告 本文关键词:阿伦,方差,作业,面向对象,编程技术

    面向对象编程技术大作业-阿伦方差设计报告 本文简介:面向对象编程技术大作业——阿伦方差问题学部:电信学部学院:计算机科学与技术学院班级:计科1406学号:21409173姓名:黄栋一、问题分析在科学研究实验中,经常遇到对大量的实验数据的处理问题。其处理方法有很多种,但其基本的处理一般包括:求均值、方差等。假设有一检测量,其实验测量值服从正态概率密度分

    面向对象编程技术大作业-阿伦方差设计报告 本文内容:

    面向对象编程技术大作业

    ——阿伦方差问题

    部:电信学部

    院:计算机科学与技术学院

    级:计科1406

    号:21409173

    名:黄

    一、

    问题分析

    在科学研究实验中,经常遇到对大量的实验数据的处理问题。其处理方法有很多种,但其基本的处理一般包括:求均值、方差等。

    假设有一检测量,其实验测量值服从正态概率密度分布,分布范围:,分布概率100%,其中是其数学期望,是该测量样本的方差,样本基本采样频率为10ms。

    对该采样样本,根据给定的时间间隔t0,对样本数据分段,总共(T/t0)=n段,T为整个样本对应的采样时间。每一段内的数据求平均,得到n个平均值avg(n),然后将这n个平均值组成的数组求,即该样本的t0间隔平滑方差。t0的取值为:10ms,20ms,50ms,100ms,200ms,500ms,1s,2s,5s,10s,100s等就得到一系列t0间隔的平滑方差。

    以t0为横坐标,为纵坐标,画出双对数曲线。所绘制的曲线应采用逻辑坐标系,保证双对数曲线所见即所得。同时支持打印和打印预览。

    问题中要对一组服从高斯分布的实验数据进行处理,因此要首先生成一批高斯分布的随机数,并判断产生的随机数是否在置信区间内,若不在,则将该类型数据剔除,直到生成满足条件的数为止。考虑到数据样本量较大,采用文件存取数较为方便。

    要针对不同分段的数据进行分类处理,读入的数据量不同,采用C++支持的STL的vector存储数据能够方便地不同数量的数据。

    VC6.0中的SDI程序已经支持打印及打印预览,故采用SDI编程比较方便。同时,考虑打印预览的所见即所得特性,应采用坐标转换。

    二、

    算法设计及部分实现

    首先,将高斯分布随机数生成函数,选择在置信区间内的随机数函数,文件存取函数,求阿伦方差等函数设计于一个类中。如下所示。

    #define

    BufferNum

    10

    #ifndef

    ALLENVARIANCE_HEADER

    #define

    ALLENVARIANCE_HEADER

    class

    AllenVariance

    {

    double

    m_GaussMean,m_GaussVariance;//随机数方差和均值

    unsigned

    int

    m_GaussTotalNum,m_CountGaussNum;//样本数

    double

    GaussianNumBuffer[BufferNum];

    unsigned

    int

    m_SetSampleTime;

    vector

    m_t0;

    public:

    vector

    m_Variance;//求得阿伦方差

    vector

    m_Data;

    private:

    vector

    m_Average;//临时所求所期望值

    vector

    m_DrawData;//阿伦方差取对数

    vector

    m_Xaxis;//坐标标点

    static

    bool

    LessThan

    (pair

    public:

    vector

    >

    m_FinalData;

    AllenVariance

    (

    double

    Mean

    =

    0,double

    Variance

    =

    1,unsigned

    int

    TotalNum

    =

    2000,unsigned

    int

    SamSet

    =

    13)

    {

    m_GaussMean

    =

    Mean;

    m_GaussVariance

    =

    Variance;

    m_GaussTotalNum

    =

    TotalNum;

    m_CountGaussNum

    =

    0;

    m_SetSampleTime

    =

    SamSet

    ;

    SetSample

    ();

    }//

    构造函数

    double

    GaussianGenerator

    ();//

    高斯随机数生成函数

    double

    ReGenerateGaussianNum

    ();//重新生成高斯随机数

    bool

    SelectStdData

    (

    double

    );//判断随机数是否满足要求

    bool

    FileBuffer

    ();//文件读写

    bool

    WriteToFile

    ();//写入文件

    bool

    ReadFromFile

    ();//从文件读数到内存

    vector

    ReadFromFile

    (

    unsigned

    int

    Number

    );//存文件//数据

    bool

    TestGaussSize

    ();//

    高斯随机数是否达到要求

    void

    SetSample

    ();//

    设置采样点

    void

    DivideData

    (

    doublearr

    );

    void

    DivideData

    (

    int

    );//

    数据分割

    void

    ProcessDivideData

    (

    /*doubledata*/

    );

    void

    ProcessDivideData

    (const

    vector//

    求阿伦方差

    double

    AverageDivideData

    (const

    vector//求均值

    void

    GetDifferentT0

    ();

    void

    GetAllDatas

    ();//获取方差数据

    void

    GetDrawData

    ();//获取坐标数据

    };

    在SDI绘图过程,要进行坐标转换,代码如下(代码没有设备上下文,故不能直接使用):

    CRect

    rect;

    GetClientRect

    (//获得窗口大小

    SetMapMode

    (MM_ANISOTROPIC);//

    设置映射模式

    //SetWindowExt设定窗口尺寸

    以逻辑单位计算,

    //SetViewportExt

    设定视口尺寸

    以物理单位计算

    SetViewportOrg

    (rect.right/2,rect.bottom/2);//逻辑视口标原点

    SetViewportExt

    (rect.right,rect.bottom);

    SetWindowOrg

    (0,0);//窗口原点

    SetWindowExt

    (rect.right*1,-rect.bottom*1);映射比例

    在设计打印预览上,由于打印机上的单位面积上的像素点数多于屏幕上单位面积上的像素点数,为实现所见即所得功能,也要进行坐标转换。代码如下:

    pDC->SetMapMode

    (MM_ANISOTROPIC);//转换坐标映射方式

    CSize

    size

    =

    CSize

    (1280,800);

    pDC->SetWindowExt(size);//确定窗口大小

    int

    xLogPixPerInch

    =

    pDC->GetDeviceCaps

    (LOGPIXELSX);//得到实际设备每逻辑英寸的象素数量

    int

    yLogPixPerInch

    =

    pDC->GetDeviceCaps

    (LOGPIXELSY);

    long

    xExt

    =

    (long)size.cx

    xLogPixPerInch

    /

    96;

    //得到设备坐标和逻辑坐标的比例

    long

    yExt

    =

    (long)size.cy

    yLogPixPerInch

    /

    96;

    pDC->SetViewportExt

    (

    (int)xExt,(int)yExt

    );

    三、

    程序运行

    1.

    程序打开界面:

    点击菜单栏上的“AllenVariance”中的“参数设置”,弹出如下对话框:

    设置相应均值,方差及样本数后,点击右侧提交按钮。再单击“确定”。生成高斯随机数。

    2.

    点击菜单“AllenVariance”中的“读取数据”选项,程序会提示从文件读取数据的对话框。

    点击确定,读取文件数据。数据读分完后,会弹出相似对话框以提示工作完成。

    4.点击“AllenVariance”中的“显示数据”,程序显示所计算出的方差。

    5.

    点击“AllenVariance”中的“显示图形”,绘出双对数曲线。

    6.

    点击“AllenVariance”中的“准备打印”,再点击菜单“文件”中的“打印预览”,就可以得到预览图像。

    四、心得体会

    通过本次设计,成功的实现了阿伦方差计算的算法。由于平时实际编程较少,真正写起代码起来后,感觉动手操作和知识学习是两个完全不同的体系,就算是掌握了基本的知识点,要想应用到实际编程中也是十分的困难。在准备题目的过程中,我逐渐对一些知识点有了另外的理解,渐渐找到了题目的入手点。在整个设计过程中,对MFC的设计有了更加深入的了解,对MFC以及Windows程序的运行机制有更好的了解,通过这次设计,提高了我对编程的兴趣,也提醒我在今后要多动手多操作,提高实际编程能力。最后,在完成设计的时候,有一种满足感。感谢老师和师兄师姐在平时的耐心指导,谢谢!

    • 范文大全
    • 职场知识
    • 精美散文
    • 名著
    • 讲坛
    • 诗歌
    • 礼仪知识