计算方法上机作业插值与拟合试验报告_第1页
计算方法上机作业插值与拟合试验报告_第2页
计算方法上机作业插值与拟合试验报告_第3页
计算方法上机作业插值与拟合试验报告_第4页
计算方法上机作业插值与拟合试验报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、计算方法实验班级:学号:姓名:计算方法与实习实验报告目录 TOC o 1-5 h z HYPERLINK l bookmark0 o Current Document 计算方法实验1. HYPERLINK l bookmark4 o Current Document 1实验目的3. HYPERLINK l bookmark6 o Current Document 2实验步骤3. HYPERLINK l bookmark8 o Current Document 环境配置:3. HYPERLINK l bookmark10 o Current Document 添加头文件3. HYPERLINK

2、l bookmark12 o Current Document 主要模块3. HYPERLINK l bookmark14 o Current Document 3代码4. HYPERLINK l bookmark16 o Current Document 主程序部分4.多项式方程部分4.核心算法部分8.数据结构部分1.3 HYPERLINK l bookmark37 o Current Document 4运行结果19 HYPERLINK l bookmark39 o Current Document 拉格朗日插值法运行结果 1.9 HYPERLINK l bookmark41 o Curr

3、ent Document 牛顿插值法运行结果 20 HYPERLINK l bookmark43 o Current Document 多项式拟合运行结果20 HYPERLINK l bookmark45 o Current Document 5总结21. HYPERLINK l bookmark47 o Current Document 日插值法21 HYPERLINK l bookmark49 o Current Document 值法2.1 HYPERLINK l bookmark51 o Current Document 拟合21 HYPERLINK l bookmark53 o Cu

4、rrent Document 6参考资料22计算方法与实习实验报告1实验目的.通过编程对拉格朗日插值法、牛顿插值法以及多项式拟合数据的理解.观察上述方法的计算稳定性和求解精度并比较各种方法利弊2实验步骤环境配置:VS2013, C+控制台程序添加头文件#include stdio.h#include stdlib.h#include stdafx.h主要模块程序一共分成三层,最底层是数据结构部分,负责存储数据,第二层是交互 部分,即多项式方程部分,负责输入输出获得数据,最上层是核心的算法部分, 负责处理已获得的数据。具体功能如下:数据结构部分数据结构部分是整个程序的最底层,负责存储部分。因方程

5、系数作为数据元 素插入和删除操作较少,而顺序表空间利用率大且查看方便,故此程序选用 顺序表保存系数。数据结构文件中写的是有关顺序表的所有基本操作以供其 他文件调用。本次实验使用列主元高斯消元法作为求解方程组的方法,所以 也用了二维顺序表存储数组。综上,数据结构部分文件是前两个试验的文件 内容和,稍作修改。常系数微分方程部分多项式方程部分是程序的第二层,内容主要是常系数微分方程导数的计算和 显示菜单部分。算法部分算法部分分为两个文件,一个是插值部分,一个是拟合部分。插值部分文件负责有关插值的核心算法,处于整个程序最上层部分,负责拉 格朗日插值法和牛顿插值法的具体实现过程。调用方程文件的函数,将获

6、得 的数据进行处理运算,将结果返回给方程主函数和输出的第二层。每种方法 有两个函数,一个为仅仅实现一次插值的算法,另一个是和方程部分联系的计算方法与实习实验报告函数,负责交互中想实现的整体的算法。拟合部分文件主要负责多项式拟合的算法实现,因为要用到列主元高斯消去 法所以也将此部分算法移入其中。主函数负责获取方程系数并显示,算法和方程作为后台程序,顺序表作为存储手 段。3代码主程序部分/ Interpolationandfitting.cpp :定义控制台应用程序的入口点。/#include stdafx.h#includeequation.h#include stdafx.hint _tmai

7、n(intargc, _TCHAR* argv口)一一GetEquation();while (Exflag)ShowMenu();return 0;多项式方程部分方程部分头文件#ifndef _EQUATION_H#define _EQUATION_H#include squencelist.h#include stdio.h#include stdlib.hextern intNumberx;计算方法与实习实验报告extern intExflag;extern sequenlist *B;extern sequenlist *D;extern sequenlist *L;void GetE

8、quation(void);void ShowMenu(void);void printres(sequenlist *A);void printfunction2(datacoa *A);void printfunctionf(datacoa *A); void Tip(void);#endif方程部分CP浅件#include stdafx.h#include equation.h#include math.h#include alfitting.h#include alinterpolation.h#include squencelist.h#include stdio.h#include

9、#include /全局变量intNumberx=0;intExflag = 1;sequenlist *B;sequenlist *D;sequenlist *L;/获得给定数据 /void GetEquation(void)(int j = 0;datatype x = 0;B = InitList();D = InitList();cout 输入给定数据的个数:Numberx;计算方法与实习实验报告cout “从小到大输入x,输入00结束(如y=xA2+2x+1输入1 2 1 00): x;while (x != 00)(for (j = 1; j x;)cin.clear();cout

10、 输入 f(x),输入 00 结束(如 y=xA2+2x+1 输入 1 2 1 00) : x;while (x != 00)(for (j = 1; j x;)printres(B);printres(D);)/显示交互 /void ShowMenu(void)(int c1, c2;cout 选择插值白方法:endl;cout 1.拉格朗日插值法endl;cout 2.牛顿插值法endl;cout 3.直接拟合endl;cout 0.退出 c1;switch (c1)(case 0:Tip();break;Langmethod();break;Newtonmethod();6计算方法与实习

11、实验报告break;break;default:break;)cout 选择拟合方式:endl;cout 1多项式拟合endl;cout 2.返回插值endl;cout 0.退出 c2;switch (c2)case 0:Tip();break;Fpolynomial();Tip();break;break;default:break;)/打印结果 /void printres(sequenlist *A)inti;for (i = 1; ilast; i+) coutsetw(12) datai;) coutendl;)/打印输出矩阵 /void printfunction2(datacoa

12、 *A)inti, j;cout 矩阵=endl;for (i = 1; im; i+)计算方法与实习实验报告(for (j = 1; j n; j+)(coutsetw(12) dataij;) coutendl;)/ 打印输出函数 /void printfunctionf(datacoa *A) (inti = 1;cout f=;coutdataiA-n;for (i = 2; im; i+)(if (A-dataiA-n 0)coutdataiA-n * xA i - 1;else cout + dataiA-n * xA i - 1; ) coutendl;)/返回提示 /void

13、Tip(void) (int flag;cout 输入000退出,其余返回: flag;if (flag = 000)Exflag = 0;)3.3核心算法部分插值部分头文件#ifndef _ALINTERPOLATION_H#define _ALINTERPOLATION_H#include stdio.h#include stdlib.hvoid Langmethod(void);datatype Langarange(sequenlist *X, sequenlist *F, datatype x);8计算方法与实习实验报告datatype Newtoninterpolation(seq

14、uenlist *X, sequenlist *F, datatype x); void Newtonmethod(void);#endif插值部分CP浅件#include alinterpolation.h#include stdafx.h#include squencelist.h#include equation.h#include math.h/ 拉格朗日插值 /datatype Langarange(sequenlist *X, sequenlist *F, datatype x) inti, j;datatype temp = 0;L = InitList();for (i = 1

15、; idatai, i);for (j = 1; j datai = L-datai * (x - X-dataj) / (X-datai - X-dataj); temp = temp + L-datai;return temp;void Langmethod(void)inti;datatype x, f;cout 请输入插值点: x;f = Langarange(B, D, x);i = Findi(B, x);Insert(B, x, i);Insert(D, f, i);计算方法与实习实验报告printres(B);printres(D);)/牛顿多项式插值 /datatype Ne

16、wtoninterpolation(sequenlist *X, sequenlist *F, datatype x) (inti, j, k;datacoa *FX;datatype temp1 = 0, temp2 = 0, Nn = 0;double temp = 1;FX = InitStruct();for (i = 1; idatai, i, 1);InsertA2(FX, F-datai, i, 2);)for (j = 3; j = Numberx + 1; j+)(for (i = 1; idatai + 1j - 1 - FX-dataij - 1;temp2 = FX-d

17、atai + j - 21 - FX-datai1;InsertA2(FX, temp1 / temp2, i, j);)Nn = FX-data12;for (j = 3; j = Numberx + 1; j+)(for (k = 1; k datak1);Nn = Nn + temp*FX-data1j;temp = 1;)return Nn;)void Newtonmethod(void)(inti;datatype x, f;cout 请输入插值点: x;f = Newtoninterpolation(B, D, x);i = Findi(B, x);Insert(B, x, i);

18、10计算方法与实习实验报告Insert(D, f, i); printres(B); printres(D);拟合部分头文件#ifndef _ALFITTING_H#define _ALFITTING_H#include stdio.h#include stdlib.hvoid ColumnGaussmethod(datacoa *A, intXnumbers);void Fpolynomial(void);#endif拟合部分CP浅件#include alfitting.h#include stdafx.h#include squencelist.h#include equation.h#i

19、nclude math.h/列主元高斯消元法 /void ColumnGaussmethod(datacoa *A, intXnumbers) inti, j, i2, flagc, k, j2;intFnumber = Xnumbers - 1;datatype temp, res;for (i = 1; iFnumber; i+) flagc = i;for (i2 = i + 1; i2 datai2i)(fabs(A-dataflagci)flagc = i2;if (flagc != i)for (k = i; k dataik;A-dataik = A-dataflagck;A-d

20、ataflagck = temp;11计算方法与实习实验报告for (i2 = i + 1; i2 datai2i / A-dataii;for (j2 = i; j2 datai2j2 = A-datai2j2 - temp*A-dataij2;for (i = Fnumber; i= 1; i-)(for (j = Fnumber; j = i + 1; j-)A-dataiXnumbers = A-dataiXnumbers - A-dataij * A-datajXnumbers + 1;res = A-dataiXnumbers / A-dataii;InsertA2(A, res,

21、 i, Xnumbers + 1);/ 多项式拟合 /void Fpolynomial(void)(intXnumbers;inti, j, k;datatype s = 0, t = 0;datacoa *A;A = InitStruct();cout 请输入拟合次数:Xnumbers;for (i = 1; i= Xnumbers + 1; i+)(for (j = 1; j = Xnumbers + 1; j+)(for (k = 1; k last; k+)s = s + pow(B-datak, j + i - 2);InsertA2(A, s, i, j);s = 0;for (k

22、 = 1; k last; k+)t = t + pow(B-datak, i - 1)*D-datak;InsertA2(A, t, i, Xnumbers + 2);t = 0;ColumnGaussmethod(A, A-n);12计算方法与实习实验报告printfunctionf(A);)3.4数据结构部分数据结构头文件#ifndef _SQUENCELIST_H#define _SQUENCELIST_H#include stdio.h#include stdlib.h#include stdafx.h#include using namespace std;#define maxs

23、ize 1024 /*sequenlist*/typedef double datatype;typedef structdatatype datamaxsizemaxsize;int m, n;datacoa;typedef structdatatype datamaxsize;int last;sequenlist;sequenlist *InitList();int Length(sequenlist*);int Insert(sequenlist*, datatype, int);int Delete(sequenlist*, int);int Locate(sequenlist*,

24、datatype);void del_node(sequenlist*, datatype);void PrintList(sequenlist*);int Compare_L(sequenlist*, sequenlist*);int Findi(sequenlist*L, datatype x);13计算方法与实习实验报告void Invert(sequenlist*);datacoa *InitStruct();int InsertA2(datacoa*, datatype, int, int);void DeleteLie(datacoa*L, int j);void DeleteLi

25、ne(datacoa*L, int i);/*linklist*/typedef char linkdatatype;typedef struct node linkdatatype data;struct node*next;linklist;linklist* CreateListF();#endif数据结构CP浅件#include stdafx.h#include squencelist.h/数 据 结 构 部 分/sequenlist/sequenlist *InitList() sequenlist*L = (sequenlist*)malloc(sizeof(sequenlist)

26、;L-last = 0;return L;/ sequenlist*L = new sequenlist;int Length(sequenlist*L) return L-last;intInsert(sequenlist*L, datatype x, inti)int j;if (L-last = maxsize - 1)14计算方法与实习实验报告(cout 表已满last; j = i; j-)L-dataj + 1 = L-dataj;L-datai = x;L-last+;return 1;)intDelete(sequenlist*L, inti)(int j;if (iL-las

27、t)(cout 非法删除位置endl;return 0;)for (j = i; j last; j+)L-dataj = L-dataj + 1;L-last-;return 1;)intLocate(sequenlist*L, datatype x)(inti = 1;while (ilast)(if (L-datai != x)i+;else return i;)return 0;)/*顺序表中删除所有元素为x的结点*/ void del_node(sequenlist*L, datatype x) (.inti = Locate(L, x); while (i != 0)15计算方法与

28、实习实验报告(if (!Delete(L, i)break;i = Locate(L, x);)void PrintList(sequenlist*L)(inti = 1;for (i = 1; ilast; i+) coutdatai ;coutlast;m = B-last;while (j = n) & (j dataj = B-dataj)i = 0;if (A-dataj dataj)(i = -1;break;)if (A-dataj B-dataj)(i = 1;break;) j+;)if (i != 0)return i;else(if (m n)i = 1;if (n m)

29、i = -1;if (m = n)i = 0;return i;16计算方法与实习实验报告)int Findi(sequenlist*L,datatype x)(inti;for (i = 1; ilast; i+) if (L-dataix)break;return i;)void Invert(sequenlist*L)(inti;datatype temp;for (i = 1; ilast / 2; i+)(temp = L-datai;L-datai = L-dataL-last + 1 - i;L-dataL-last + 1 - i = temp;)/ARRAY/datacoa

30、*InitStruct()(datacoa*L = (datacoa*)malloc(sizeof(datacoa);L-m = 0;L-n = 0;return L;/ datacoa*L = new datacoa;)int InsertA2(datacoa*L, datatype x, inti, int j)(int k;if (L-m = maxsize - 1) | (L-n = maxsize - 1)(cout 表已满n; k = j; k-)L-dataik + 1 = L-dataik;L-dataij = x;if (i L-m)L-m+;if (j L-n)L-n+;r

31、eturn 1;)void DeleteLie(datacoa*L, int j)int k, i;if (jL-n)cout 非法删除位置endl;)for (i = 1; im; i+)for (k = j; k n; k+) L-dataij = L-dataij + 1;)L-n-;)void DeleteLine(datacoa*L, inti)int k, j;if(iL-m)cout 非法删除位置endl;)for (j = 1; j n; j+)for (k = i; k m; k+) L-dataij = L-datai + 1j;)L-m-;)/linklist/ linklist* CreateListF()18计算方法与实习实验报告linklist *head, *p;char ch;head = (linklist*)malloc(sizeof(linklist);head-next = NULL;cinch;while (ch != n)p = (linklist*)malloc(sizeof(linklist);p-data = ch;p-next = head-

温馨提示

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

评论

0/150

提交评论