}
// TODO: 在此添加控件通知处理程序代码
void CchazhiDlg::OnBnClickedButton3() { }
CubicInterpolation *cubicInterpolation = new CubicInterpolation(); cubicInterpolation->initVector(xy.x, xy.y, 0, 0, xy.n+1); cubicInterpolation->calcCoefs();
for(int i=0;i for(int x=xy.x[i];x double result = cubicInterpolation->evaluate(x); } pDC->LineTo(int (uchangex(x)),int (uchangey(result))); } Sleep(10); CWnd *pwnd=AfxGetMainWnd(); CDC *pDC=pwnd->GetDC(); CPen pen(PS_SOLID,2,RGB(100,255,255)); pDC->SelectObject(&pen); pDC->MoveTo(int(uchangex(xy.x[0])),int (uchangey((xy.y[0])))); 21 22 实验二:数值积分 2.1、实验目的 通过该课程实习,学会使用数值积分的各种方法求解定积分计算的问题,体会各种方法的精度差异。 2.2、实验环境 Visual studio 2015 2.3、实验内容 本实验将梯形法的递推化和龙贝格算法编写为类CIntegration,在工程中调用该类得出积分结果并画出区间二分图像。首先画出被积函数图像,并储存被积函数在图像中每个像素对应的采样点的横坐标(存放于float型指针p_X中)和纵坐标(存放于int型指针p_Y中);然后调用CIntegration类中相应函数,计算积分结果;最后将x轴上的区间二分点与其对应的被积函数值的点连线。 根据实验内容和算法流程图预先编好程序初稿,上机调试、运行。 2、在屏幕上按适当比例和位置画出坐标轴及解的函数曲线输出正确的结果。 3、测试、分析它们的运行结果,比较三种方法的精度和误差。 2.4、实验结果 // TwoDlg.cpp : implementation file // #include \ #include \ #include \ #include \ #include \ #include \ #ifdef _DEBUG #define new DEBUG_NEW #endif // CAboutDlg dialog used for App About 23 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // Dialog Data #ifdef AFX_DESIGN_TIME enum { IDD = IDD_ABOUTBOX }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // Implementation protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CTwoDlg dialog CTwoDlg::CTwoDlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_TWO_DIALOG, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } double CTwoDlg::fun(double x) { 24 // DDX/DDV support } if (x == 0.0) return 1.0; return sin(x) / x; int CTwoDlg::parseInt(CString mStr) { } void CTwoDlg::DoDataExchange(CDataExchange* pDX) { } BEGIN_MESSAGE_MAP(CTwoDlg, CDialogEx) // CTwoDlg message handlers BOOL CTwoDlg::OnInitDialog() { // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); // Add \ CDialogEx::OnInitDialog(); ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_EN_CHANGE(IDC_EDIT1, &CTwoDlg::OnEnChangeEdit1) ON_BN_CLICKED(IDC_BUTTON3, &CTwoDlg::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON4, &CTwoDlg::OnBnClickedButton4) ON_BN_CLICKED(IDC_BUTTON2, &CTwoDlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON5, &CTwoDlg::OnBnClickedButton5) ON_BN_CLICKED(IDC_BUTTON1, &CTwoDlg::OnBnClickedButton1) CDialogEx::DoDataExchange(pDX); int x = 0; for (int i = 0; i < mStr.GetLength(); i++) { } return x; x *= 10; x += (mStr[i] - '0'); END_MESSAGE_MAP() 25