计算方法上机作业插值与拟合实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算方法实验
题目:
班级:
学号:
姓名:
目录
计算方法实验 (1)
1 实验目的 (3)
2 实验步骤 (3)
2.1环境配置: (3)
2.2添加头文件 (3)
2.3主要模块 (3)
3 代码 (4)
3.1主程序部分 (4)
3.2多项式方程部分 (4)
3.3核心算法部分 (8)
3.4数据结构部分 (13)
4运行结果 (19)
4.1拉格朗日插值法运行结果 (19)
4.2牛顿插值法运行结果 (20)
4.3多项式拟合运行结果 (20)
5总结 (21)
拉格朗日插值法 (21)
牛顿插值法 (21)
多项式拟合 (21)
6参考资料 (22)
1 实验目的
1.通过编程对拉格朗日插值法、牛顿插值法以及多项式拟合数据的理解
2.观察上述方法的计算稳定性和求解精度并比较各种方法利弊
2 实验步骤
2.1环境配置:
VS2013,C++控制台程序
2.2添加头文件
#include "stdio.h"
#include "stdlib.h"
#include "stdafx.h"
2.3主要模块
程序一共分成三层,最底层是数据结构部分,负责存储数据,第二层是交互部分,即多项式方程部分,负责输入输出获得数据,最上层是核心的算法部分,负责处理已获得的数据。具体功能如下:
●数据结构部分
数据结构部分是整个程序的最底层,负责存储部分。因方程系数作为数据元素插入和删除操作较少,而顺序表空间利用率大且查看方便,故此程序选用顺序表保存系数。数据结构文件中写的是有关顺序表的所有基本操作以供其他文件调用。本次实验使用列主元高斯消元法作为求解方程组的方法,所以也用了二维顺序表存储数组。综上,数据结构部分文件是前两个试验的文件内容和,稍作修改。
●常系数微分方程部分
多项式方程部分是程序的第二层,内容主要是常系数微分方程导数的计算和显示菜单部分。
●算法部分
算法部分分为两个文件,一个是插值部分,一个是拟合部分。
插值部分文件负责有关插值的核心算法,处于整个程序最上层部分,负责拉格朗日插值法和牛顿插值法的具体实现过程。调用方程文件的函数,将获得的数据进行处理运算,将结果返回给方程主函数和输出的第二层。每种方法有两个函数,一个为仅仅实现一次插值的算法,另一个是和方程部分联系的
函数,负责交互中想实现的整体的算法。
拟合部分文件主要负责多项式拟合的算法实现,因为要用到列主元高斯消去法所以也将此部分算法移入其中。
主函数负责获取方程系数并显示,算法和方程作为后台程序,顺序表作为存储手段。
3 代码
3.1主程序部分
// Interpolationandfitting.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include"equation.h"
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
GetEquation();
while (Exflag)
{
ShowMenu();
}
return 0;
}
3.2多项式方程部分
方程部分头文件
#ifndef _EQUATION_H
#define _EQUATION_H
#include "squencelist.h"
#include "stdio.h"
#include "stdlib.h"
extern int Numberx;
extern int Exflag;
extern sequenlist *B;
extern sequenlist *D;
extern sequenlist *L;
void GetEquation(void);
void ShowMenu(void);
void printres(sequenlist *A);
void printfunction2(datacoa *A);
void printfunctionf(datacoa *A);
void Tip(void);
#endif
方程部分CPP文件
#include "stdafx.h"
#include "equation.h"
#include "math.h"
#include "alfitting.h"
#include "alinterpolation.h"
#include "squencelist.h"
#include "stdio.h"
#include
#include
//全局变量
int Numberx=0;
int Exflag = 1;
sequenlist *B;
sequenlist *D;
sequenlist *L;
////////////////////////获得给定数据///////////////////////// void GetEquation(void)
{
int j = 0;
datatype x = 0;
B = InitList();
D = InitList();
cout << "输入给定数据的个数:" << endl;
cin >> Numberx;