// TODO: 在此添加控件通知处理程序代码 CString mStr;
GetDlgItem(IDC_EDIT1)->GetWindowTextW(mStr); int n;
n = parseInt(mStr); double e = 1.0; int i = 0; while (i double a, b, h, x; double t1, t2, s, s1, s2, c1, c2, r1, r2; a = 0, b = 6; k = 1, h = b - a, t1 = h / 2 * (fun(a) + fun(b)); CDC *p = GetDC(); do { s = 0, x = a + h / 2; do { //p->MoveTo(100 + 50 * x, 300); bool flag = fun(x) >0 ? 1 : 0; for (int i = 300 - fun(x) * 100;; ) { } //p->LineTo(100 + 50 * x, 300 - fun(x) * 100); s += fun(x), x += h; Sleep(100); p->MoveTo(100 + 50 * x, i); i = flag ? i + 1 : i - 1; if ((flag&&i > 300) || (!flag&&i < 300)) { } Sleep(10); p->LineTo(100 + 50 * x, i); break; e *= 0.1; i++; } while (x t2 = t1 / 2 + h / 2 * s; s2 = t2 + 1.0 / 3 * (t2 - t1); k++; h /= 2; t1 = t2; 31 } s1 = s2; if (k == 2) continue; c2 = s2 + 1.0 / 15 * (s2 - s1); c1 = c2; if (k == 3) continue; r2 = c2 + 1.0 / 63 * (c2 - c1); if (k == 4) { } if (fabs(r2 - r1) r1 = r2; continue; } while (true); CString ms; ms.Format(_T(\), r2); p->TextOutW(200, 50, _T(\龙贝格算法求定积分的解为:\)); p->TextOutW(250, 70, ms); ReleaseDC(p); 32 实验三:微分方程 3.1、实验目的 通过本次实验,熟悉求解常微分方程初值问题的有关方法和理论,主要是欧拉法、改进欧拉法、四阶龙格库塔法,学会编制这三种方法的计算程序。体会这三种解法的功能、优缺点及适用场合。 3.2、实验环境 Visual studio 2015 3.3、实验内容与步骤 本实验将欧拉法、改进欧拉法和经典四阶龙哥库塔法编写为一个类CDifferential_Equation,调用该类实现一阶微分方程初值问题的求解,并画出解函数的图像。 根据实验内容和算法流程图预先编好程序初稿,上机调试、运行。 2、在屏幕上按适当比例和位置画出坐标轴及解的函数曲线输出正确的结果。 3、测试、分析它们的运行结果,比较三种方法的精度和误差。 3.4、实验结果 // weifenDlg.h : 头文件 // #pragma once void drawxy(); double uchangex(double x); double changex(double x); double changey(double y); double uchangey(double y); double daoshu(double x,double y); double Y(double x); // CweifenDlg 对话框 class CweifenDlg : public CDialogEx { // 构造 public: 33 CweifenDlg(CWnd* pParent = NULL); // 标准构造函数 // 对话框数据 protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 enum { IDD = IDD_WEIFEN_DIALOG }; // 实现 protected: HICON m_hIcon; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedButton4(); afx_msg void OnBnClickedButton1(); bool start; double h; int n; double a,b; double *x,*y; afx_msg void OnBnClickedButton2(); afx_msg void OnBnClickedButton3(); }; 34 实验四:非线性方程 4.1、实验目的 通过本次实验,熟练的掌握方程求根的最基本、常用的运算方法和理论。主要有二分法、牛顿法、弦截法,并体会它们各自不同的特点及收敛速率。 4.2、实验环境 Visual studio 2015 4.3、实验内容 2.1 算法原理与底层计算程序 非线性方程f(x)=0。 对于单根区间[a,b],f(a)f(b)<0: ① 区间中点m为(a+b)/2,如果|b-a| ② 如果f(a)=0(或f(b)=0),则a(或b)即为方程的解(注意:程序中,两浮点数不可判断相等,即使两浮点数a和b理论上相等,但“a==b;”一般不成立); (1)二分法 35