《计算方法》
课内实验报告
专业:计算机科学与技术 班级:14419013 学号:1440501218 姓名:秦魏
江苏科技大学计算机科学与工程学院
2016年12月
1
目录
目录 .................................................................................................................................................. 2
实验一:插值方法................................................................................................................... 2
1.1、实验目的 .................................................................................................................. 2 1.2、实验环境 .................................................................................................................. 3 1.3、实验内容 .................................................................................................................. 3 1.4、实验结果 .................................................................................................................. 3 实验二:数值积分................................................................................................................. 23
2.1、实验目的 ................................................................................................................ 23 2.2、实验环境 ................................................................................................................ 23 2.3、实验内容 ................................................................................................................ 23 2.4、实验结果 ................................................................................................................ 23 实验三:微分方程................................................................................................................. 33
3.1、实验目的 ................................................................................................................ 33 3.2、实验环境 ................................................................................................................ 33 3.3、实验内容与步骤 .................................................................................................... 33 本实验将欧拉法、改进欧拉法和经典四阶龙哥库塔法编写为一个类CDifferential_Equation,调用该类实现一阶微分方程初值问题的求解,并画出解函数的图像。 ................................................................................................................. 33 3.4、实验结果 ................................................................................................................ 33 实验四:非线性方程............................................................................................................. 35
4.1、实验目的 ................................................................................................................ 35 4.2、实验环境 ................................................................................................................ 35 4.3、实验内容 ................................................................................................................ 35 4.4、实验结果 ................................................................................................................ 36 实验五:线性方程组............................................................................................................. 50
5.1、实验目的 ................................................................................................................ 50 5.2、实验环境 ................................................................................................................ 50 5.3、实验内容 ................................................................................................................ 50 5.4、实验结果 ................................................................................................................ 51
实验一:插值方法
1.1、实验目的
通过本次上机实习,能够进一步加深对各种插值算法的理解;学会使用用三种类型的插值函数的数学模型、基本算法,结合相应软件(如VC/VB/Delphi/Matlab/JAVA/Turbo C)编程实现数值方法的求解。并用该软件的绘图功能来显示插值函数,使其计算结果更加直观和形象化。
2
1.2、实验环境
Visual studio 2015
1.3、实验内容
通过程序求出插值函数的表达式是比较麻烦的,常用的方法是描出插值曲线上尽量密集的有限个采样点,并用这有限个采样点的连线,即折线,近似插值曲线。取点越密集,所得折线就越逼近理论上的插值曲线。本实验中将所取的点的横坐标存放于动态数组于动态数组Y[n]中。
本实验将Lagrange插值、Newton插值和三次样条插值实现为一个C++类CInterpolation,并在Button单击事件中调用该类相应函数,得出插值结果并画出图像。
根据实验内容和算法流程图预先编好程序初稿,上机调试、运行。
2、在屏幕上按适当比例和位置画出坐标轴及解的函数曲线输出正确的结果。 3、测试、分析它们的运行结果,比较三种方法的精度和误差。
X[n]中,通过插值方法计算得到的对应纵坐标存放
1.4、实验结果
BOOL CchazhiDlg::OnInitDialog() {
CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) {
BOOL bNameValid; CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty()) {
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000);
// 将“关于...”菜单项添加到系统菜单中。
3
}
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作
SetIcon(m_hIcon, TRUE);
// 设置大图标
SetIcon(m_hIcon, FALSE);
// 设置小图标
// TODO: 在此添加额外的初始化代码 start=false;
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
void CchazhiDlg::OnSysCommand(UINT nID, LPARAM lParam) { }
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。
void CchazhiDlg::OnPaint() {
SendMessage(WM_ICONERASEBKGND, reinterpret_cast
for (int i = 0; i<20; i++) { }
if (IsIconic()) {
CPaintDC dc(this); // 用于绘制的设备上下文 xy.x[i] = 0; xy.y[i] = 0;
if ((nID & 0xFFF0) == IDM_ABOUTBOX) { } else { }
CDialogEx::OnSysCommand(nID, lParam); CAboutDlg dlgAbout; dlgAbout.DoModal();
4
}
//当用户拖动最小化窗口时系统调用此函数取得光标 //显示。
HCURSOR CchazhiDlg::OnQueryDragIcon() { }
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.x[0])),int (uchangey((xy.y[0])))); for(int x=int(xy.x[0]);x<=xy.x[xy.n];x++){ double result=0;
for(int i=0;i<=xy.n;i++){ }
pDC->LineTo(int(uchangex(x)),int (uchangey(result))); Sleep(10); }
pwnd->ReleaseDC(pDC);
result+=l(x,i,xy.n,xy)*xy.y[i]; return static_cast
CDialogEx::OnPaint(); // 绘制图标
dc.DrawIcon(x, y, m_hIcon);
// 使图标在工作区矩形中居中
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;
5