计算方法实验报告_第1页
计算方法实验报告_第2页
计算方法实验报告_第3页
计算方法实验报告_第4页
计算方法实验报告_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算方法课内实验报告专业:计算机科学与技术班级:14419013学号:1440501218姓名:秦魏江苏科技大学计算机科学与工程学院2016年12月目录目录2实验一:插值方法21.1、实验目的21.2、实验环境31.3、实验内容31.4、实验结果3实验二:数值积分232.1、实验目的232.2、实验环境232.3、实验内容232.4、实验结果23实验三:微分方程333.1、实验目的333.2、实验环境333.3、实验内容与步骤33本实验将欧拉法、改进欧拉法和经典四阶龙哥库塔法编写为一个类CDifferential_Equation,调用该类实现一阶微分方程初值问题的求解,并画出解函数的图像。3

2、33.4、实验结果33实验四:非线性方程354.1、实验目的354.2、实验环境354.3、实验内容354.4、实验结果36实验五:线性方程组505.1、实验目的505.2、实验环境505.3、实验内容505.4、实验结果51实验一:插值方法1.1、实验目的通过本次上机实习,能够进一步加深对各种插值算法的理解;学会使用用三种类型的插值函数的数学模型、基本算法,结合相应软件(如VC/VB/Delphi/Matlab/JAVA/Turbo C)编程实现数值方法的求解。并用该软件的绘图功能来显示插值函数,使其计算结果更加直观和形象化。1.2、实验环境Visual studio 20151.3、实验内

3、容通过程序求出插值函数的表达式是比较麻烦的,常用的方法是描出插值曲线上尽量密集的有限个采样点,并用这有限个采样点的连线,即折线,近似插值曲线。取点越密集,所得折线就越逼近理论上的插值曲线。本实验中将所取的点的横坐标存放于动态数组中,通过插值方法计算得到的对应纵坐标存放于动态数组中。本实验将Lagrange插值、Newton插值和三次样条插值实现为一个C+类CInterpolation,并在Button单击事件中调用该类相应函数,得出插值结果并画出图像。根据实验内容和算法流程图预先编好程序初稿,上机调试、运行。2、在屏幕上按适当比例和位置画出坐标轴及解的函数曲线输出正确的结果。3、测试、分析它们

4、的运行结果,比较三种方法的精度和误差。1.4、实验结果BOOL CchazhiDlg:OnInitDialog()/ 将“关于.”菜单项添加到系统菜单中。/ IDM_ABOUTBOX 必须在系统命令范围内。ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动/ 执行此操作SetIcon(

5、m_hIcon, TRUE);/ 设置大图标SetIcon(m_hIcon, FALSE);/ 设置小图标/ TODO: 在此添加额外的初始化代码start=false;return TRUE; / 除非将焦点设置到控件,否则返回 TRUEvoid CchazhiDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialogEx:OnSysCommand(nID, lParam);/ 如果向对话框添加最小化按钮,

6、则需要下面的代码/ 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,/ 这将由框架自动完成。void CchazhiDlg:OnPaint()start = true;drawxy();xy.n = -1;for (int i = 0; i20; i+) xy.xi = 0;xy.yi = 0;if (IsIconic()CPaintDC dc(this); / 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0);/ 使图标在工作区矩形中居中int cxIcon = GetSyst

7、emMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ 绘制图标dc.DrawIcon(x, y, m_hIcon);elseCDialogEx:OnPaint();/当用户拖动最小化窗口时系统调用此函数取得光标/显示。HCURSOR CchazhiDlg:OnQueryDragIcon()retur

8、n static_cast(m_hIcon);void CchazhiDlg:OnBnClickedButton1()if(start)CWnd *pwnd=AfxGetMainWnd();CDC *pDC=pwnd-GetDC();CPen pen(PS_SOLID,2,RGB(255,0,0);pDC-SelectObject(&pen);pDC-MoveTo(int(uchangex(xy.x0),int (uchangey(xy.y0);for(int x=int(xy.x0);x=xy.xxy.n;x+)double result=0;for(int i=0;iLineTo(int(

9、uchangex(x),int (uchangey(result);Sleep(10);pwnd-ReleaseDC(pDC);/ TODO: 在此添加控件通知处理程序代码void CchazhiDlg:OnBnClickedButton4()/ TODO: 在此添加控件通知处理程序代码void drawxy()CWnd *pwnd=AfxGetMainWnd();CDC *pDC=pwnd-GetDC();pDC-MoveTo(120,180);pDC-LineTo(600,180);pDC-LineTo(594,174);pDC-MoveTo(600,180);pDC-LineTo(594

10、,186);pDC-MoveTo(350,380);pDC-LineTo(350,0);pDC-LineTo(356,6);pDC-MoveTo(350,0);pDC-LineTo(344,6);pDC-MoveTo(120,0);pDC-TextOutA(355,0,y);pDC-TextOutA(590,182,x);/pDC-TextOutA(340,185,o);pwnd-ReleaseDC(pDC);double changex(double x)return x-350;double uchangex(double x)return x+350;double changey(dou

11、ble y)return -y+180;double uchangey(double y)return -y+180;void CchazhiDlg:OnLButtonDown(UINT nFlags, CPoint point)/ TODO: 在此添加消息处理程序代码和/或调用默认值CWnd *pwnd=AfxGetMainWnd();CDC *pDC=pwnd-GetDC();if(start)if(point.x120&point.x0&point.yEllipse(point.x-2,point.y-2,point.x+2,point.y+2);xy.n+;xy.xxy.n=chang

12、ex(double (point.x);xy.yxy.n=changey(double (point.y);for(int i=0;ixy.n;i+)for(int j=0;jxy.xj+1)double temp=0;temp=xy.xj;xy.xj=xy.xj+1;xy.xj+1=temp;temp=xy.yj;xy.yj=xy.yj+1;xy.yj+1=temp;CDialogEx:OnLButtonDown(nFlags, point);double l(double xv,int i,int n,date xy) double t=1; for(int j=0;jGetDC();CP

13、en pen(PS_SOLID,2,RGB(0,0,0);pDC-SelectObject(&pen);pDC-MoveTo(int(uchangex(xy.x0),int (uchangey(xy.y0);double *chashang;chashang=new double *20;for(int i=0;i20;i+)chashangi=new double 20;for(int j=0;j20;j+)chashangij=0;for(int i=0;i=xy.n;i+)chashangi0=xy.yi;for(int j=1;j=xy.n;j+)for(int i=j;i=xy.n;

14、i+)chashangij=(chashangij-1-chashangi-1j-1)/(xy.xi-xy.xi-j);for(int i=xy.x0;i=xy.xxy.n;i+)double result=0;for(int j=0;j=xy.n;j+)double temp=1;for(int k=0;kLineTo(int ( uchangex(i),int (uchangey(result);Sleep(10);pwnd-ReleaseDC(pDC);/ TODO: 在此添加控件通知处理程序代码void CchazhiDlg:OnBnClickedButton3()CWnd *pwnd

15、=AfxGetMainWnd();CDC *pDC=pwnd-GetDC();CPen pen(PS_SOLID,2,RGB(100,255,255);pDC-SelectObject(&pen);pDC-MoveTo(int(uchangex(xy.x0),int (uchangey(xy.y0);CubicInterpolation *cubicInterpolation = new CubicInterpolation();cubicInterpolation-initVector(xy.x, xy.y, 0, 0, xy.n+1);cubicInterpolation-calcCoef

16、s();for(int i=0;ixy.n;i+)for(int x=xy.xi;xevaluate(x);pDC-LineTo(int (uchangex(x),int (uchangey(result);Sleep(10);BOOL CchazhiDlg:OnInitDialog()/ 将“关于.”菜单项添加到系统菜单中。/ IDM_ABOUTBOX 必须在系统命令范围内。ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu

17、(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动/ 执行此操作SetIcon(m_hIcon, TRUE);/ 设置大图标SetIcon(m_hIcon, FALSE);/ 设置小图标/ TODO: 在此添加额外的初始化代码start=false;return TRUE; / 除非将焦点设置到控件,否则返回 TRUEvoid CchazhiDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutD

18、lg dlgAbout;dlgAbout.DoModal();elseCDialogEx:OnSysCommand(nID, lParam);/ 如果向对话框添加最小化按钮,则需要下面的代码/ 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,/ 这将由框架自动完成。void CchazhiDlg:OnPaint()start = true;drawxy();xy.n = -1;for (int i = 0; i20; i+) xy.xi = 0;xy.yi = 0;if (IsIconic()CPaintDC dc(this); / 用于绘制的设备上下文SendMessage(WM_

19、ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0);/ 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ 绘制图标dc.DrawIcon(x, y, m_hIcon);elseC

20、DialogEx:OnPaint();/当用户拖动最小化窗口时系统调用此函数取得光标/显示。HCURSOR CchazhiDlg:OnQueryDragIcon()return static_cast(m_hIcon);void CchazhiDlg:OnBnClickedButton1()if(start)CWnd *pwnd=AfxGetMainWnd();CDC *pDC=pwnd-GetDC();CPen pen(PS_SOLID,2,RGB(255,0,0);pDC-SelectObject(&pen);pDC-MoveTo(int(uchangex(xy.x0),int (ucha

21、ngey(xy.y0);for(int x=int(xy.x0);x=xy.xxy.n;x+)double result=0;for(int i=0;iLineTo(int(uchangex(x),int (uchangey(result);Sleep(10);pwnd-ReleaseDC(pDC);/ TODO: 在此添加控件通知处理程序代码void CchazhiDlg:OnBnClickedButton4()/ TODO: 在此添加控件通知处理程序代码void drawxy()CWnd *pwnd=AfxGetMainWnd();CDC *pDC=pwnd-GetDC();pDC-Mov

22、eTo(120,180);pDC-LineTo(600,180);pDC-LineTo(594,174);pDC-MoveTo(600,180);pDC-LineTo(594,186);pDC-MoveTo(350,380);pDC-LineTo(350,0);pDC-LineTo(356,6);pDC-MoveTo(350,0);pDC-LineTo(344,6);pDC-MoveTo(120,0);pDC-TextOutA(355,0,y);pDC-TextOutA(590,182,x);/pDC-TextOutA(340,185,o);pwnd-ReleaseDC(pDC);double

23、 changex(double x)return x-350;double uchangex(double x)return x+350;double changey(double y)return -y+180;double uchangey(double y)return -y+180;void CchazhiDlg:OnLButtonDown(UINT nFlags, CPoint point)/ TODO: 在此添加消息处理程序代码和/或调用默认值CWnd *pwnd=AfxGetMainWnd();CDC *pDC=pwnd-GetDC();if(start)if(point.x12

24、0&point.x0&point.yEllipse(point.x-2,point.y-2,point.x+2,point.y+2);xy.n+;xy.xxy.n=changex(double (point.x);xy.yxy.n=changey(double (point.y);for(int i=0;ixy.n;i+)for(int j=0;jxy.xj+1)double temp=0;temp=xy.xj;xy.xj=xy.xj+1;xy.xj+1=temp;temp=xy.yj;xy.yj=xy.yj+1;xy.yj+1=temp;CDialogEx:OnLButtonDown(nFl

25、ags, point);double l(double xv,int i,int n,date xy) double t=1; for(int j=0;jGetDC();CPen pen(PS_SOLID,2,RGB(0,0,0);pDC-SelectObject(&pen);pDC-MoveTo(int(uchangex(xy.x0),int (uchangey(xy.y0);double *chashang;chashang=new double *20;for(int i=0;i20;i+)chashangi=new double 20;for(int j=0;j20;j+)chasha

26、ngij=0;for(int i=0;i=xy.n;i+)chashangi0=xy.yi;for(int j=1;j=xy.n;j+)for(int i=j;i=xy.n;i+)chashangij=(chashangij-1-chashangi-1j-1)/(xy.xi-xy.xi-j);for(int i=xy.x0;i=xy.xxy.n;i+)double result=0;for(int j=0;j=xy.n;j+)double temp=1;for(int k=0;kLineTo(int ( uchangex(i),int (uchangey(result);Sleep(10);p

27、wnd-ReleaseDC(pDC);/ TODO: 在此添加控件通知处理程序代码void CchazhiDlg:OnBnClickedButton3()CWnd *pwnd=AfxGetMainWnd();CDC *pDC=pwnd-GetDC();CPen pen(PS_SOLID,2,RGB(100,255,255);pDC-SelectObject(&pen);pDC-MoveTo(int(uchangex(xy.x0),int (uchangey(xy.y0);CubicInterpolation *cubicInterpolation = new CubicInterpolatio

28、n();cubicInterpolation-initVector(xy.x, xy.y, 0, 0, xy.n+1);cubicInterpolation-calcCoefs();for(int i=0;ixy.n;i+)for(int x=xy.xi;xevaluate(x);pDC-LineTo(int (uchangex(x),int (uchangey(result);Sleep(10);BOOL CchazhiDlg:OnInitDialog()/ 将“关于.”菜单项添加到系统菜单中。/ IDM_ABOUTBOX 必须在系统命令范围内。ASSERT(IDM_ABOUTBOX & 0

29、xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动/ 执行此操作SetIcon(m_hIcon, TRUE);/ 设置大图标SetIcon(m_hIcon, FALSE);/ 设置小图标/ TODO: 在此添加额外的初始化代码start=false;return TRUE; / 除非将焦点设置到控件,否则返回 TRUEvoid C

30、chazhiDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialogEx:OnSysCommand(nID, lParam);/ 如果向对话框添加最小化按钮,则需要下面的代码/ 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,/ 这将由框架自动完成。void CchazhiDlg:OnPaint()start = true;drawxy();xy.n = -1;for (int i = 0; i2

31、0; i+) xy.xi = 0;xy.yi = 0;if (IsIconic()CPaintDC dc(this); / 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0);/ 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon +

32、 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ 绘制图标dc.DrawIcon(x, y, m_hIcon);elseCDialogEx:OnPaint();/当用户拖动最小化窗口时系统调用此函数取得光标/显示。HCURSOR CchazhiDlg:OnQueryDragIcon()return static_cast(m_hIcon);void CchazhiDlg:OnBnClickedButton1()if(start)CWnd *pwnd=AfxGetMainWnd();CDC *pDC=pwnd-GetDC();CPen pen(

33、PS_SOLID,2,RGB(255,0,0);pDC-SelectObject(&pen);pDC-MoveTo(int(uchangex(xy.x0),int (uchangey(xy.y0);for(int x=int(xy.x0);x=xy.xxy.n;x+)double result=0;for(int i=0;iLineTo(int(uchangex(x),int (uchangey(result);Sleep(10);pwnd-ReleaseDC(pDC);/ TODO: 在此添加控件通知处理程序代码void CchazhiDlg:OnBnClickedButton4()/ TO

34、DO: 在此添加控件通知处理程序代码void drawxy()CWnd *pwnd=AfxGetMainWnd();CDC *pDC=pwnd-GetDC();pDC-MoveTo(120,180);pDC-LineTo(600,180);pDC-LineTo(594,174);pDC-MoveTo(600,180);pDC-LineTo(594,186);pDC-MoveTo(350,380);pDC-LineTo(350,0);pDC-LineTo(356,6);pDC-MoveTo(350,0);pDC-LineTo(344,6);pDC-MoveTo(120,0);pDC-TextOu

35、tA(355,0,y);pDC-TextOutA(590,182,x);/pDC-TextOutA(340,185,o);pwnd-ReleaseDC(pDC);double changex(double x)return x-350;double uchangex(double x)return x+350;double changey(double y)return -y+180;double uchangey(double y)return -y+180;void CchazhiDlg:OnLButtonDown(UINT nFlags, CPoint point)/ TODO: 在此添

36、加消息处理程序代码和/或调用默认值CWnd *pwnd=AfxGetMainWnd();CDC *pDC=pwnd-GetDC();if(start)if(point.x120&point.x0&point.yEllipse(point.x-2,point.y-2,point.x+2,point.y+2);xy.n+;xy.xxy.n=changex(double (point.x);xy.yxy.n=changey(double (point.y);for(int i=0;ixy.n;i+)for(int j=0;jxy.xj+1)double temp=0;temp=xy.xj;xy.xj

37、=xy.xj+1;xy.xj+1=temp;temp=xy.yj;xy.yj=xy.yj+1;xy.yj+1=temp;CDialogEx:OnLButtonDown(nFlags, point);double l(double xv,int i,int n,date xy) double t=1; for(int j=0;jGetDC();CPen pen(PS_SOLID,2,RGB(0,0,0);pDC-SelectObject(&pen);pDC-MoveTo(int(uchangex(xy.x0),int (uchangey(xy.y0);double *chashang;chash

38、ang=new double *20;for(int i=0;i20;i+)chashangi=new double 20;for(int j=0;j20;j+)chashangij=0;for(int i=0;i=xy.n;i+)chashangi0=xy.yi;for(int j=1;j=xy.n;j+)for(int i=j;i=xy.n;i+)chashangij=(chashangij-1-chashangi-1j-1)/(xy.xi-xy.xi-j);for(int i=xy.x0;i=xy.xxy.n;i+)double result=0;for(int j=0;j=xy.n;j

39、+)double temp=1;for(int k=0;kLineTo(int ( uchangex(i),int (uchangey(result);Sleep(10);pwnd-ReleaseDC(pDC);/ TODO: 在此添加控件通知处理程序代码void CchazhiDlg:OnBnClickedButton3()CWnd *pwnd=AfxGetMainWnd();CDC *pDC=pwnd-GetDC();CPen pen(PS_SOLID,2,RGB(100,255,255);pDC-SelectObject(&pen);pDC-MoveTo(int(uchangex(xy.

40、x0),int (uchangey(xy.y0);CubicInterpolation *cubicInterpolation = new CubicInterpolation();cubicInterpolation-initVector(xy.x, xy.y, 0, 0, xy.n+1);cubicInterpolation-calcCoefs();for(int i=0;ixy.n;i+)for(int x=xy.xi;xevaluate(x);pDC-LineTo(int (uchangex(x),int (uchangey(result);Sleep(10);实验二:数值积分2.1、

41、实验目的通过该课程实习,学会使用数值积分的各种方法求解定积分计算的问题,体会各种方法的精度差异。2.2、实验环境Visual studio 20152.3、实验内容本实验将梯形法的递推化和龙贝格算法编写为类CIntegration,在工程中调用该类得出积分结果并画出区间二分图像。首先画出被积函数图像,并储存被积函数在图像中每个像素对应的采样点的横坐标(存放于float型指针p_X中)和纵坐标(存放于int型指针p_Y中);然后调用CIntegration类中相应函数,计算积分结果;最后将x轴上的区间二分点与其对应的被积函数值的点连线。根据实验内容和算法流程图预先编好程序初稿,上机调试、运行。2

42、、在屏幕上按适当比例和位置画出坐标轴及解的函数曲线输出正确的结果。3、测试、分析它们的运行结果,比较三种方法的精度和误差。2.4、实验结果/ TwoDlg.cpp : implementation file/#include stdafx.h#include Two.h#include TwoDlg.h#include afxdialogex.h#include cmath#include windows.h#ifdef _DEBUG#define new DEBUG_NEW#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogExpublic:CAboutDlg();/ Dialog Data#ifdef AFX_DESIGN_TIMEenum IDD = IDD_ABOUTBOX ;#endifprotected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/ Implementationpr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论