版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算方法实验题目: 班级:学号:姓名:22计算方法与实习实验报告目录计算方法实验11 实验目的32 实验步骤32.1环境配置:32.2添加头文件32.3主要模块33 代码43.1主程序部分43.2多项式方程部分43.3核心算法部分83.4数据结构部分134运行结果194.1拉格朗日插值法运行结果194.2牛顿插值法运行结果204.3多项式拟合运行结果205总结21拉格朗日插值法21牛顿插值法21多项式拟合216参考资料221 实验目的1. 通过编程对拉格朗日插值法、牛顿插值法以及多项式拟合数据的理解2. 观察上述方法的计算稳定性和求解精度并比较各种方法利弊2 实验步骤2.1环境配置:VS201
2、3,C+控制台程序2.2添加头文件#include stdio.h#include stdlib.h#include stdafx.h2.3主要模块程序一共分成三层,最底层是数据结构部分,负责存储数据,第二层是交互部分,即多项式方程部分,负责输入输出获得数据,最上层是核心的算法部分,负责处理已获得的数据。具体功能如下:l 数据结构部分数据结构部分是整个程序的最底层,负责存储部分。因方程系数作为数据元素插入和删除操作较少,而顺序表空间利用率大且查看方便,故此程序选用顺序表保存系数。数据结构文件中写的是有关顺序表的所有基本操作以供其他文件调用。本次实验使用列主元高斯消元法作为求解方程组的方法,所以
3、也用了二维顺序表存储数组。综上,数据结构部分文件是前两个试验的文件内容和,稍作修改。l 常系数微分方程部分多项式方程部分是程序的第二层,内容主要是常系数微分方程导数的计算和显示菜单部分。l 算法部分算法部分分为两个文件,一个是插值部分,一个是拟合部分。插值部分文件负责有关插值的核心算法,处于整个程序最上层部分,负责拉格朗日插值法和牛顿插值法的具体实现过程。调用方程文件的函数,将获得的数据进行处理运算,将结果返回给方程主函数和输出的第二层。每种方法有两个函数,一个为仅仅实现一次插值的算法,另一个是和方程部分联系的函数,负责交互中想实现的整体的算法。拟合部分文件主要负责多项式拟合的算法实现,因为要
4、用到列主元高斯消去法所以也将此部分算法移入其中。主函数负责获取方程系数并显示,算法和方程作为后台程序,顺序表作为存储手段。3 代码3.1主程序部分/ Interpolationandfitting.cpp : 定义控制台应用程序的入口点。/#include stdafx.h#includeequation.h#include stdafx.hint _tmain(int argc, _TCHAR* argv)GetEquation();while (Exflag)ShowMenu();return 0;3.2多项式方程部分l 方程部分头文件#ifndef _EQUATION_H#define
5、_EQUATION_H#include squencelist.h#include stdio.h#include stdlib.hextern 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
6、);void Tip(void);#endifl 方程部分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 =
7、0;datatype x = 0;B = InitList();D = InitList();cout 输入给定数据的个数: Numberx;cout 从小到大输入x,输入00结束(如y=x2+2x+1输入1 2 1 00): x;while (x != 00)for (j = 1; j x;cin.clear();cout 输入f(x),输入00结束(如y=x2+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 选
8、择插值的方法: endl;cout 1.拉格朗日插值法 endl;cout 2.牛顿插值法 endl;cout 3.直接拟合 endl;cout 0.退出 c1;switch (c1)case 0:Tip();break;case 1:Langmethod();break;case 2:Newtonmethod();break;case 3:break;default:break;cout 选择拟合方式: endl;cout 1.多项式拟合 endl;cout 2.返回插值 endl;cout 0.退出 c2;switch (c2)case 0:Tip();break;case 1:Fpoly
9、nomial();Tip();break;case 2:break;default:break;/打印结果/void printres(sequenlist *A)int i;for (i = 1; i last; i+)cout setw(12) datai;cout endl;/打印输出矩阵/void printfunction2(datacoa *A)int i, j;cout 矩阵= endl;for (i = 1; i m; i+)for (j = 1; j n; j+)cout setw(12) dataij;cout endl;/打印输出函数/void printfunction
10、f(datacoa *A)int i = 1;cout f=;cout dataiA-n;for (i = 2; i m; i+)if (A-dataiA-n 0)cout dataiA-n * x i - 1;else cout + dataiA-n * x i - 1;cout endl;/返回提示/void Tip(void)int flag;cout 输入000退出,其余返回: flag;if (flag = 000)Exflag = 0;3.3核心算法部分l 插值部分头文件#ifndef _ALINTERPOLATION_H#define _ALINTERPOLATION_H#inc
11、lude stdio.h#include stdlib.hvoid Langmethod(void);datatype Langarange(sequenlist *X, sequenlist *F, datatype x);datatype Newtoninterpolation(sequenlist *X, sequenlist *F, datatype x);void Newtonmethod(void);#endifl 插值部分CPP文件#include alinterpolation.h#include stdafx.h#include squencelist.h#include e
12、quation.h#include math.h/拉格朗日插值/datatype Langarange(sequenlist *X, sequenlist *F, datatype x)int i, j;datatype temp = 0;L = InitList();for (i = 1; i datai, i);for (j = 1; j datai = L-datai * (x - X-dataj) / (X-datai - X-dataj);temp = temp + L-datai;return temp;void Langmethod(void)int i;datatype x,
13、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 Newtoninterpolation(sequenlist *X, sequenlist *F, datatype x)int i, j, k;datacoa *FX;datatype temp1 = 0, temp2 = 0, Nn = 0;double temp = 1;FX = InitStruct();for (i = 1;
14、i datai, i, 1);InsertA2(FX, F-datai, i, 2);for (j = 3; j = Numberx + 1; j+)for (i = 1; i datai + 1j - 1 - FX-dataij - 1;temp2 = FX-datai + 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;retur
15、n Nn;void Newtonmethod(void)int i;datatype x, f;cout 请输入插值点: x;f = Newtoninterpolation(B, D, x);i = Findi(B, x);Insert(B, x, i);Insert(D, f, i);printres(B);printres(D);l 拟合部分头文件#ifndef _ALFITTING_H#define _ALFITTING_H#include stdio.h#include stdlib.hvoid ColumnGaussmethod(datacoa *A, int Xnumbers);v
16、oid Fpolynomial(void);#endifl 拟合部分CPP文件#include alfitting.h#include stdafx.h#include squencelist.h#include equation.h#include math.h/列主元高斯消元法/void ColumnGaussmethod(datacoa *A, int Xnumbers)int i, j, i2, flagc, k, j2;int Fnumber = Xnumbers - 1;datatype temp, res;for (i = 1; i Fnumber; i+)flagc = i;f
17、or (i2 = i + 1; i2 datai2i)(fabs(A-dataflagci)flagc = i2;if (flagc != i)for (k = i; k dataik;A-dataik = A-dataflagck;A-dataflagck = temp;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-dataiXn
18、umbers = A-dataiXnumbers - A-dataij * A-datajXnumbers + 1;res = A-dataiXnumbers / A-dataii;InsertA2(A, res, i, Xnumbers + 1);/多项式拟合/void Fpolynomial(void)int Xnumbers;int i, j, k;datatype s = 0, t = 0;datacoa *A;A = InitStruct();cout 请输入拟合次数: Xnumbers;for (i = 1; i = Xnumbers + 1; i+)for (j = 1; j =
19、 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 = 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);printfunctionf(A);3.4数据结构部分l 数据结构头文件#ifndef _SQUENCELIST_H#define _SQUENCELIS
20、T_H#include stdio.h#include stdlib.h#include stdafx.h#includeusing namespace std;#define maxsize 1024/*sequenlist*/typedef double datatype;typedef structdatatype datamaxsizemaxsize;int m, n;datacoa;typedef structdatatype datamaxsize;int last;sequenlist;sequenlist *InitList();int Length(sequenlist*);
21、int Insert(sequenlist*, datatype, int);int Delete(sequenlist*, int);int Locate(sequenlist*, datatype);void del_node(sequenlist*, datatype);void PrintList(sequenlist*);int Compare_L(sequenlist*, sequenlist*);int Findi(sequenlist*L, datatype x);void Invert(sequenlist*);datacoa *InitStruct();int Insert
22、A2(datacoa*, datatype, int, int);void DeleteLie(datacoa*L, int j);void DeleteLine(datacoa*L, int i);/*linklist*/typedef char linkdatatype;typedef struct nodelinkdatatype data;struct node*next;linklist;linklist* CreateListF();#endifl 数据结构CPP文件#include stdafx.h#include squencelist.h/数据结构部分/sequenlist/
23、sequenlist *InitList()sequenlist*L = (sequenlist*)malloc(sizeof(sequenlist);L-last = 0;return L;/sequenlist*L = new sequenlist;int Length(sequenlist*L)return L-last;int Insert(sequenlist*L, datatype x, int i)int j;if (L-last = maxsize - 1)cout 表已满 last; j = i; j-)L-dataj + 1 = L-dataj;L-datai = x;L-
24、last+;return 1;int Delete(sequenlist*L, int i)int j;if (iL-last)cout 非法删除位置 endl;return 0;for (j = i; j last; j+)L-dataj = L-dataj + 1;L-last-;return 1;int Locate(sequenlist*L, datatype x)int i = 1;while (i last)if (L-datai != x)i+;else return i;return 0;/*顺序表中删除所有元素为x的结点*/void del_node(sequenlist*L
25、, datatype x)int i = Locate(L, x);while (i != 0)if (!Delete(L, i)break;i = Locate(L, x);void PrintList(sequenlist*L)int i = 1;for (i = 1; i last; i+)cout datai ;cout last;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)
26、return i;elseif (m n)i = 1;if (n m)i = -1;if (m = n)i = 0;return i;int Findi(sequenlist*L,datatype x)int i;for (i = 1; i last; i+)if (L-dataix)break;return i;void Invert(sequenlist*L)int i;datatype temp;for (i = 1; i last / 2; i+)temp = L-datai;L-datai = L-dataL-last + 1 - i;L-dataL-last + 1 - i = t
27、emp;/ARRAY/datacoa *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, int i, 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+;return 1;void DeleteLie(datacoa*L, int j)int k, i;if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳务分包合同在建筑行业的应用
- 初中体育 健美操提高班第2次课教案
- 2024年二年级品生下册《机智勇敢保安全》教案 山东版
- 2024年学年八年级语文上册 第四单元 地球我们的家园 第15课《大树和我们的生活》教案2 沪教版五四制
- 2023三年级数学上册 七 庆元旦-时、分、秒的认识 信息窗2 有关时间的计算第1课时教案 青岛版六三制
- 2024-2025学年八年级语文下册 第六单元 22《礼记》二则教案 新人教版
- 2024-2025学年高中数学 第三章 函数的概念与性质 3.2.2 奇偶性教案 新人教A版必修第一册
- 最高额保证合同(2篇)
- 租船合同模版(2篇)
- 运输项目合同(2篇)
- 商务星球版七年级上册地理知识点归纳总结
- 四川创联专业技术人员学习-2023数字经济驱动与发展公需科目答
- 【环氧树脂复合材料研究进展文献综述6000字】
- 催审稿邮件怎么写范文
- 2023《中华人民共和国合同法》
- 悦纳自我向阳而生心理健康教育主题班会课件
- DIN-EN-ISO-2409-CN国际标准文档
- 数字经济时代“95后”新生代员工管理挑战、成因及对策分析
- 职业卫生检测考试真题十五
- Unit+3+Celebrations+Topic+Talk 高中英语北师大版(2019)必修第一册
- 2023建设工程智慧消防系统技术规程
评论
0/150
提交评论