计算方法(孙志忠)习题 第四章 插值法

计算方法(孙志忠)习题 第四章 插值法
计算方法(孙志忠)习题 第四章 插值法

数值计算方法比较

有限差分方法(FDM:Finite Difference Method)是计算机数值模拟最早采用的方法,至今仍被广泛运用。该方法将求解域划分为差分网格,用有限个网格节点代替连续的求解域。有限差分法以Taylor级数展开等方法,把控制方程中的导数用网格节点上的函数值的差商代替进行离散,从而建立以网格节点上的值为未知数的代数方程组。有限差分法主要集中在依赖于时间的问题(双曲型和抛物型方程)。有限差分法方面的经典文献有Richtmeyer & Morton的《Difference Methods for Initial-Value Problems》;R. LeVeque《Finite Difference Method for Differential Equations》;《Numerical Methods for C onservation Laws》。 注:差分格式: (1)从格式的精度来划分,有一阶格式、二阶格式和高阶格式。 (2)从差分的空间形式来考虑,可分为中心格式和逆风格式。 (3)考虑时间因子的影响,差分格式还可以分为显格式、隐格式、显隐交替格式等。 目前常见的差分格式,主要是上述几种形式的组合,不同的组合构成不同的差分格式。差分方法主要适用于有结构网格,网格的步长一般根据实际地形的情况和柯朗稳定条件来决定。 构造差分的方法: 构造差分的方法有多种形式,目前主要采用的是泰勒级数展开方法。其基本的差分表达式主要有三种形式:一阶向前差分、一阶向后差分、一阶中心差分和二阶中心差分等,其中前两种格式为一阶计算精度,后两种格式为二阶计算精度。通过对时间和空间这几种不同差分格式的组合,可以组合成不同的差分计算格式。 有限差分法的不足:由于采用的是直交网格,因此较难适应区域形状的任意性,而且区分不出场函数在区域中的轻重缓急之差异,缺乏统一有效的处理自然边值条件和内边值条件的方法,难以构造高精度(指收敛阶)差分格式,除非允许差分方程联系更多的节点(这又进一步增加处理边值条件韵困难)。另外它还有编制不出通用程序的困难。 有限差分法的优点:该方法是一种直接将微分问题变为代数问题的近似数值解法,数学概念 直观,表达简单,精度可选而且在一个时间步内,对于一个给定点来说其相关的空间点只是 与该相邻的几点,而不是全部的空间点。是发展较早且比较成熟的数值方法 广义差分法(有限体积法)(GDM:Generalized Difference Method):1953年,Mac—Neal 利用积分插值法(也称积分均衡法)建立了三角网格上的差分格 式,这就是以后通称的不规划网格上的差分法.这种方法的几何误差小,特别是给出了处理自然边值条件(及内边值条件)的有效方法,堪称差分法的一大进步。1978年,李荣华利用有限元空间和对偶单元上特征函数的推广——局部Taylor展式的公项,将积分插值法改写成广义Galerkin法形式,从而将不规则网格差分法推广为广义差分法.其基本思路是,将计算区域划分为一系列不重复的控制体积,并使每个网格点周围有

高精度计算

高精度计算 由于计算机具有运算速度快,计算精度高的特点,许多过去由人来完成的烦琐、复杂的数学计算,现在都可以由计算机来代替。 计算机计算结果的精度,通常要受到计算机硬件环境的限制。例如,pascal 要计算的数字超过19位,计算机将按浮点形式输出;另一方面,计算机又有数的表示范围的限制,在一般的微型计算机上,实数的表示范围为l0-38 -l038。例如,在计算N!时,当N=21时计算结果就超过了这个范围,无法计算了。这是由计算机的硬件性质决定的,但是,我们可以通过程序设计的方法进行高精度计算(多位数计算)。 学习重点 1、掌握高精度加、减、乘、除法。 3、理解高精度除法运算中被除数、除数、商和余数之间的关系。 4、能编写相应的程序,解决生活中高精度问题。 学习过程 一、高精度计算的基本方法 用free pascal程序进行高精度计算,首先要处理好以下几个基本问题:【数据的输入与保存】 (1)一般采用字符串变量存储数据,然后用length函数测量字符串长度确定其位数。 (2)分离各位数位上的数字 分离各数位上的数通常采用正向存储的方法。以“163848192”为例,见下表:A[9] A[8] A[7] A[6] A[5] A[4] A[3] A[2] A[1] 1 6 3 8 4 8 1 9 2 基本原理是A[1]存放个位上的数字,A[2]存放十位上的数字,……依此类推。即下标小的元素存低位上的数字,下标大的元素存高位上的数字,这叫“下标与位权一致”原则。 【计算结果位数的确定】 (1)高精度加法:和的位数为两个加数中较大数的位数+1。 (2)高精度减法:差的位数为被减数和减数中较大数的位数。 (3)高精度乘法:积的位数为两个相乘的数的位数之和。 (4)高精度除法:商的位数按题目的要求确定。 【计算顺序与结果的输出】 高精度加、减、乘法,都是从低位到高位算起,而除法相反。输出结果都是从高位到低位的顺序,注意:高位上的零不输出(整数部分是零除外)。 高精度加法 【参考程序】 var a,b:array[1..10000] of byte; i,w,la,lb:integer;

第一章 高精度计算

第一章 高精度计算 【上机练习】 1、求N!的值(ni) 【问题描述】 用高精度方法,求N!的精确值(N以一般整数输入)。 【输入样例】 10 【输出样例】 3628800 2、求A/B高精度值(ab) 【问题描述】 计算A/B的精确值,设A,B是以一般整数输入,计算结果精确到小数后20位(若不足20位,末尾不用补0)。 【输入样例1】 4 3 【输出样例1】 4/3=1.33333333333333333333 【输入样例2】 6 5 【输出样例2】 6/5=1.2 3、求n累加和(ja) 【问题描述】 用高精度方法,求s=1+2+3+……+n的精确值(n以一般整数输入)。 【输入样例】 10 【输出样例】 55 4、阶乘和(sum) 【问题描述】 已知正整数N(N<=100),设S=1!+2!+3!+...N!。其中"!"表示阶乘,即N!=1*2*3*……*(N-1)*N,如:3!=1*2*3=6。请编程实现:输入正整数N,输出计算结果S的值。 【输入样例】 4 【输出样例】 33 5、高精度求积(multiply) 【问题描述】 输入两个高精度正整数M和N(M和N均小于100位)。 【问题求解】 求这两个高精度数的积。 【输入样例】 36 3 【输出样例】 108 6、天使的起誓(yubikili) 【问题描述】 TENSHI非常幸运地被选为掌管智慧之匙的天使。在正式任职之前,她必须和其他新当选的天使一样,

要宣誓。宣誓仪式是每位天使各自表述自己的使命,她们的发言稿被放在n个呈圆形排列的宝盒中。这些宝盒按顺时针方向被编上号码1、2、3……、n-1、n。一开始天使们站在编号为N的宝盒旁。她们各自手上都有一个数字,代表她们自己的发言稿所在的盒子是从1号盒子开始按顺时针方向的第几个。例如:有7个盒子,那么如果TENSHI手上的数字为9,那么她的发言稿所在盒子就是第2个。现在天使们开始按照自己手上的数字来找发言稿,先找到的就可以先发言。TENSHI一下子就找到了,于是她最先上台宣誓:“我将带领大家开启NOI之门……”TENSHI宣誓结束以后,陆续有天使上台宣誓。可是有一位天使找了好久都找不到她的发言稿,原来她手上的数字M非常大,她转了好久都找不到她想找的宝盒。 【问题求解】 请帮助这位天使找到她想找的宝盒的编号。 【输入格式】 从文件yubikili.in的第一、二行分别读入正整数n和m,其中n、m满足 2 ≤ n≤ 108,2 ≤ m≤ 101000 【输出格式】 把所求宝盒的编号输出到文件yubikili.out,文件只有一行(包括换行符)。 【样例一】 yubikili.in yubikili.out 7 2 9 【样例二】 yubikili.in yubikili.out 9 11 108 7、Hanoi双塔问题(Noip2007) 【问题描述】 给定A、B、C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形)。现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存。要求: (1)每次只能移动一个圆盘; (2)A、B、C三根细柱上的圆盘都要保持上小下大的顺序; 任务:设A n为2n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出A n。 【输入格式】 输入文件hanoi.in为一个正整数n,表示在A柱上放有2n个圆盘。 【输出格式】 输出文件hanoi.out仅一行,包含一个正整数, 为完成上述任务所需的最少移动次数A n。 【输入输出样例1】 hanoi.in hanoi.out 1 2 【输入输出样例2】 hanoi.in hanoi.out 2 6 【限制】 对于50%的数据,1<=n<=25 对于100%的数据,1<=n<=200 【提示】设法建立A n与A n-1的递推关系式。

数值分析插值算法源程序

#include #include float f(float x) //计算ex的值 { return (exp(x)); } float g(float x) //计算根号x的值 { return (pow(x,0.5)); } void linerity () //线性插值 { float px,x; float x0,x1; printf("请输入x0,x1的值\n"); scanf("%f,%f",&x0,&x1); printf("请输入x的值: "); scanf("%f",&x); px=(x-x1)/(x0-x1)*f(x0)+(x-x0)/(x1-x0)*f(x1); printf("f(%f)=%f \n",x,px); } void second () //二次插值 { float x0,x1,x2,x,px; x0=0; x1=0.5; x2=2; printf("请输入x的值:"); scanf("%f",&x); px=((x-x1)*(x-x2))/((x0-x1)*(x0-x2))*f(x0)+((x-x0)*(x-x2))/((x1-x0)*(x1-x2))*f(x1)+((x-x0)* (x-x1))/((x2-x0)*(x2-x1))*f(x2);

printf("f(%f)=%f\n",x,px); } void Hermite () //Hermite插值 { int i,k,n=2; int flag1=0; printf("Hermite插值多项式H5(x)="); for(i=0;i<=n;i++) { int flag=0; flag1++; if(flag1==1) { printf("y%d[1-2(x-x%d)*(",i,i); } else { printf("+y%d[1-2(x-x%d)*(",i,i); } for(k=0;k<=n;k++) { if(k!=i) { flag++; if(flag==1) { printf("(1/x%d-x%d)",i,k); } else { printf("+(1/x%d-x%d)",i,k);

线性插值法计算公式解析

线性插值法计算公式解析 LELE was finally revised on the morning of December 16, 2020

线性插值法计算公式解析 2011年招标师考试实务真题第16题:某机电产品国际招标项目采用综合评价法评标。评标办法规定,产能指标评标总分值为10分,产能在100吨/日以上的为10分,80吨/日的为5分,60吨/日以下的为0分,中间产能按插值法计算分值。某投标人产能为95吨/日,应得()分。A. B.8.75 C. D. 分析:该题的考点属线性插值法又称为直线内插法,是评标办法的一种,很多学员无法理解公式含义,只能靠死记硬背,造成的结果是很快会遗忘,无法应对考试和工作中遇到的问题,对此本人从理论上进行推导,希望对学员有所帮助。 一、线性插值法两种图形及适用情形 F F F2

图一:适用于某项指标越低得分越高的项目 评分计算,如投标报价得分的计算 图二:适用于某项投标因素指标越高,得分越高的 情形,如生产效率等 二、公式推导 对于这个插值法,如何计算和运用呢,我个人认为考生在考试时先试着画一下上面的图,只有图出来了,根据三角函数定义,tana=角的对边比上邻边,从图上可以看出,∠A是始终保持不变的,因此,根据三角函数tana,我们可以得出这样的公式

图一:tana=(F1-F2)/(D2-D1)=(F-F2)/(D2-D)=(F1-F)/(D-D1),通过这个公式,我们可以进行多种推算,得出最终公式如下 F=F2+(F1-F2)*(D2-D)/ (D2-D1) 或者F= F1-(F1-F2)*(D-D1)/(D2-D1) 图二:tana=(F1-F2)/(D2-D1)=(F-F2)/ (D-D1)=(F1-F) /(D2-D) 通过这个公式我们不难得出公式: F= F2+(F1-F2)*(D-D1)/(D2-D1) 或者F=F1-(F1-F2)*(D2-D)/(D2-D1) 三:例题解析 例题一:某招标文件规定有效投标报价最高的得30分,有效投标报价最低的得60分,投标人的报价得分用线性插值法计算,在评审中,评委发现有效的最高报价为300万元,有效最低的报价为240万元,某A企业的有效投标报价为280万元,问他的价格得分为多少 分析,该题属于图一的适用情形,套用公式 计算步骤:F=60+(30-60)/(300-240)*(280-240)=40 例题二:某招标文件规定,水泵工作效率85%的3分,95%的8分,某投标人的水泵工作效率为92%,问工作效率指标得多少分

高精度运算(C++)

书籍是人类知识的总结,书籍是全世界的营养品。——莎士比亚 万进制高精度运算(C++语言) 目前在青少年信息学奥林匹克竞赛中所涉及到的高精度计算包括加(addition)、减(subtract)、乘(multiply)、除(divide)四种基本运算。其中乘法分高精度数乘高精度数和单精度数乘高精度数两种,除法一般指两个单精度数相除,求解最终指定精度的解,找出循环节或输出指定精度位数的小数。(注:高精度数与单精度数均指整数) 主要的解题思想是利用在小学就曾学习过的竖式加减乘除法则,用程序语言实现存在的问题主要有如何存储高精度数的值,如何实现计算等问题。 一. 高精度数字的存储 我们日常书写一个高精度数字,左侧为其高位,右侧为其低位,在计算中往往会因进位(carry )或借位(borrow )导致高位增长或减少,因此我们定义一个整型数组(int bignum[maxlen])从低位向高位实现高精度整数的存储,数组的每个元素存储高精度数中的一位。(如下表所示) 高精度数 3(高位) …… 7 9 4(低位) int bignum[i] n …… 2 1 显然,在C++语言中,int 类型(4个字节/32位计算机)元素存储十进制的一位数字非常浪费空间,并且运算量也非常大,因此常将程序代码优化为万进制,即数组的每个元素存储高精数字的四位。在后面的叙述过程中均以万进制为例介绍。(为什么选择万进制,而不选择更大的进制呢?十万进制中的最大值99999相乘时得到的值是9999800001超过4个字节的存储范围而溢出,从而导致程序计算错误。) 在实际编写程序代码过程中常作如下定义: const int base=10000; const int maxlen=1000+1; int bignum[maxlen]; 说明:base 表示进制为万进制,maxlen 表示高精度数的长度,1个元素能存储4个十进制位,1000个元素就存储4000个十进制位,而加1表示下标为0的元素另有它用,常用作存储当前高精度数字的位数。 二. 各种运算的程序实现 (一)加法: 首先回顾一下小学中曾学习的竖式加法,见图一: bignum1[] 9475 46 1243 bignum2[] 918 1324 341 carry 1 0 0 0 bignum_ans[] 1 393 1370 1584 图一 加法的计算过程 从上面的图中我们可以得知,做加法运算是从低位向高位进行,如果有进位,下一位进行相加时要加上进位,如果最高位已计算完还有进位,就要增加存储结果的位数,保存起进位来。关于进位的处理,往往定义单独变量carry 进行存储,程序实现的过程如图二所示: 初始化 进位carry 赋初始值0,结果的位数为两个加数的最大位数。 当前位超过最高位了? 处理当前位和进位 N Y 还有进位么? N 结束 处理进位 Y

计算方法实验报告 插值

实验名称:插值计算 1引言 在生产和科研中出现的函数是多种多样的。常常会遇到这样的情况:在某个实际问题中,虽然可以断定所考虑的函数f(x)在区间[a,b]上存在且连续,但却难以找到它的解析表达式,只能通过实验和观测得到在有限个点上的函数值。用这张函数表来直接求出其他点的函数值是非常困难的,在有些情况下,虽然可以写出f(x)的解析表达式,但由于结构十分复杂,使用起来很不方便。面对这些情况,构造函数P(x)作为f(x)的近似,插值法是解决此类问题比较古老却目前常用的方法,不仅直接广泛地应用与生产实际和科学研究中,而且是进一步学习数值计算方法的基础。 设函数y=f(x)在区间[a,b]上连续,且在n+1个不同的点a≤x0,x1……,xn≤b上分别取值y0,y1……,yn. 插值的目的就是要在一个性质优良、便于计算的函数φ中,求一简单函数P(x),使P(xi)=yi(i=0,1…,n)而在其他点x≠xi上,作为f(x)的近似。 通常,称区间[a,b]为插值区间,称点x0,x1,…,xn为插值节点,上式为插值条件,称函数类φ为插值函数类,称P(x)为函数f(x)在节点x0,x1,…,xn处的插值函数,求插值函数P(x)的方法称为插值法。 2实验目的和要求 用matlab定义分段线性插值函数、分段二次插值函数、拉格朗日插值函数,输入所给函 数表,并利用计算机选择在插值计算中所需的节点,计算f(0.15),f(0.31),f(0.47)的近似值。

3算法描述 1.分段线性插值流程图

2.分段二次插值流程图

3.拉格朗日插值流程图

4程序代码及注释 1.分段线性插值

数值分析常用的插值方法

数值分析报告 班级: 专业: 流水号: 学号: 姓名:

常用的插值方法 序言 在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。 早在6世纪,中国的刘焯已将等距二次插值用于天文计算。17世纪之后,牛顿、拉格朗日分别讨论了等距和非等距的一般插值公式。在近代,插值法仍然是数据处理和编制函数表的常用工具,又是数值积分、数值微分、非线性方程求根和微分方程数值解法的重要基础,许多求解计算公式都是以插值为基础导出的。 插值问题的提法是:假定区间[a,b〕上的实值函数f(x)在该区间上n+1个互不相同点x0,x1……x n处的值是f(x0),……f(x n),要求估算f(x)在[a,b〕中某点的值。其做法是:在事先选定的一个由简单函数构成的有n+1个参数C0, C1,……C n的函数类Φ(C0,C1,……C n)中求出满足条件P(x i)=f(x i)(i=0,1,……n)的函数P(x),并以P(x)作为f(x)的估值。此处f(x)称为被插值函数,x0,x1,……xn 称为插值结(节)点,Φ(C0,C1,……C n)称为插值函数类,上面等式称为插值条件,Φ(C0,……C n)中满足上式的函数称为插值函数,R(x)=f(x)-P(x)称为插值余项。

求解这类问题,它有很多种插值法,其中以拉格朗日(Lagrange)插值和牛顿(Newton)插值为代表的多项式插值最有特点,常用的插值还有Hermit 插值,分段插值和样条插值。 一.拉格朗日插值 1.问题提出: 已知函数()y f x =在n+1个点01,,,n x x x L 上的函数值01,,,n y y y L ,求任意一点 x '的函数值()f x '。 说明:函数()y f x =可能是未知的;也可能是已知的,但它比较复杂,很难计算其函数值()f x '。 2.解决方法: 构造一个n 次代数多项式函数()n P x 来替代未知(或复杂)函数()y f x =,则 用()n P x '作为函数值()f x '的近似值。 设()2012n n n P x a a x a x a x =++++L ,构造()n P x 即是确定n+1个多项式的系数 012,,,,n a a a a L 。 3.构造()n P x 的依据: 当多项式函数()n P x 也同时过已知的n+1个点时,我们可以认为多项式函数 ()n P x 逼近于原来的函数()f x 。根据这个条件,可以写出非齐次线性方程组: 20102000 20112111 2012n n n n n n n n n n a a x a x a x y a a x a x a x y a a x a x a x y ?++++=?++++=?? ? ?++++=?L L L L L 其系数矩阵的行列式D 为范德萌行列式: ()20 0021110 2111n n i j n i j n n n n x x x x x x D x x x x x ≥>≥= = -∏L L M M M M L

高精度运算(C++)

万进制高精度运算(C++语言) 目前在青少年信息学奥林匹克竞赛中所涉及到的高精度计算包括加(addition)、减(subtract)、乘(multiply)、除(divide)四种基本运算。其中乘法分高精度数乘高精度数和单精度数乘高精度数两种,除法一般指两个单精度数相除,求解最终指定精度的解,找出循环节或输出指定精度位数的小数。(注:高精度数与单精度数均指整数) 主要的解题思想是利用在小学就曾学习过的坚式加减乘除法则,用程序语言实现存在的问题主要有如何存储高精度数的值,如何实现计算等问题。 一. 高精度数字的存储 我们日常书写一个高精度数字,左侧为其高位,右侧为其低位,在计算中往往会因进位(carry )或借位(borrow )导致高位增长或减少,因此我们定义一个整型数组(int bignum[maxlen])从低位向高位实现高精度整数的存储,数组的每个元素存储高精度数中的一位。(如下表所示) 高精度数 3(高位) …… 7 9 4(低位) int bignum[i] n …… 2 1 显然,在C++语言中,int 类型(4个字节/32位计算机)元素存储十进制的一位数字非常浪费空间,并且运算量也非常大,因此常将程序代码优化为万进制,即数组的每个元素存储高精数字的四位。在后面的叙述过程中均以万进制为例介绍。(为什么选择万进制,而不选择更大的进制呢?十万进制中的最大值99999相乘时得到的值是9999800001超过4个字节的存储范围而溢出,从而导致程序计算错误。) 在实际编写程序代码过程中常作如下定义: const int base=10000; const int maxlen=1000+1; int bignum[maxlen]; 说明:base 表示进制为万进制,maxlen 表示高精度数的长度,1个元素能存储4个十进制位,1000个元素就存储4000个十进制位,而加1表示下标为0的元素另有它用,常用作存储当前高精度数字的位数。 二. 各种运算的程序实现 (一)加法: 首先回顾一下小学中曾学习的坚式加法,见图一: bignum1[] 9475 46 1243 bignum2[] 918 1324 341 carry 1 0 0 0 bignum_ans[] 1 393 1370 1584 图一 加法的计算过程 从上面的图中我们可以得知,做加法运算是从低位向高位进行,如果有进位,下一位进行相加时要加上进位,如果最高位已计算完还有进位,就要增加存储结果的位数,保存起进位来。关于进位的处理,往往定义单独变量carry 进行存储,程序实现的过程如图二所示: 图二 加法的实现过程 初始化 进位carry 赋初始值0,结果的位数为两个加数的最大位数。 当前位超过最高位了? 处理当前位和进位 N Y 还有进位么? N 结束 处理进位 Y

第4章 插值法作业

第4章 插值法 2.证明:n 次拉格朗日插值多项式为: 0()()()() n n n j n k k k k k j k j j k x x L x y l x y x x ===≠-==-∑∑∏ ————(1) 现令 ()() n j j x x x ω==-∏,则 00 '()() n n j m j j m x x x ω==≠=-∑ ∏,————2() 将 k x 代入 '()() n n j m j j m x x x ω==≠=-∑ ∏,可得 0'()() n k k j j j m x x x ω=≠=-∏————————(3) 将(3)和(2)代入(1)中命题可证。 5.证明提示:利用线性插值余项可以推出命题。 6.证明:由题意可知,()f x 是n 次多项式并有n 个互异的实根,可令 12()()()......()()n n n n f x a x x x x x x a x ω=---= 再令()j g x x = 则 j n k k=11()'()'() n k k k n n k g x x f x a x ω==∑ ∑ 利用均差性质:则 []121()1 ......'()n k n k n n k n g x g x x x a x a ω==∑ 又由均差与导数的性质可证命题成立。 7.算法提示:利用差商表可求。 8.算法提示:利用求牛顿插值公式。 12.证明提示:参考拉格朗日插值余项的证明方法。 14.算法提示:参考三对角方程组的样条函数的求解过程及例11。 补充习题解题思路 1. 设)(x l k (k= 0, 1, 2, …,n)是n 次拉格朗日插值基函数, 试证: ∑==n k j k j k x x l x 0 )( 。 (j = 0, 1, 2, …, n ) 证明:记n k x k k ...2,1,0,==?,

高精度运算(加减)

高精度计算(一) 一、教学目标 ●了解什么是高精度计算。为什么要进行高精度计算。 ●熟练掌握基本的加、减高精度计算 二、重点难点分析 ●高精度数的存储方式; 三、教具或课件 使用多媒体演示文稿 四、主要教学过程 (一)引入新课 利用计算机进行数值计算,有时会遇到这样的问题:有些计算要求精度高,希望计算的数的位数可达几十位甚至几百位,虽然计算机的计算精度也算较高了,但因受到硬件的限制,往往达不到实际问题所要求的精度.我们可以利用程序设计的方法去实现这们的高精度计算.这里仅介绍常用的几种高精度计算的方法。 (二)教学过程设计 1、高精度计算中需要处理好以下几个问题: (1)数据的接收方法和存贮方法 数据的接收和存贮:当输入的数很长时,可采用字符串方式输入,这样可输入数字很长的数,利用字符串函数和操作运算,将每一位数取出,存入数组中. Type numtype=array[1..500]of word;{整数数组类型} Var a,b:numtype;{a和b为整数数组} la,lb:integer;{整数数组a的长度和b的长度} s:string;{输入数串} 将数串s转化为整数数组a的方法如下: readln(s); la:=length(s); for i:=1 to la do a[la-i+1]:=ord(s[i])-ord(‘0’); 另一种方法是直接用循环加数组方法输入数据. Type arr= array[1..100] of integer; prucedure readdata(var int:arr); var ch:char; i,k:integer; begin read(ch);k:=0;

数值计算方法复习题2

习题二 1. 已知 ,求的二次值多项式。 2. 令 解:; ,介于x和0,1决定的区 间内;,当时。 的数表,分别用线性插值与二次插值求 3. 给出函数 ,试利用拉格朗日余项定理写出以为节点的三次 4. 设 插值多项式。 ,求及的值。1,0 5. 已知 6. 根据如下函数值表求四次牛顿插值多项式,并用其计算 , 的如下函数值表,解答下列问题(1)试列出相应 7. 已知函数 的差分表;(2)分别写出牛顿向前插值公式和牛顿向后插值公式。 解:向前插值公式

向后插值公式 8. 下表为概率积分 的数据表,试问:1)时, 积分 在各点的数据(取五位有效数 9. 利用 字),求方程 在0.3和0.4之间的根的近似值。0.3376489 10. 依据表10中数据,求三次埃尔米特插值多项式。 11. 依据数表11 项式。 上给出的等距节点函数表,用分段线性插值求 12. 在 的近似值,要使截断误差不超过 取? 13. 将区间 分成n等分,求在上的分段三次埃尔米 特插值多项式,并估计截断误差。 14、给定的数值表

用线性插值与二次插值计算ln0.54的近似值并估计误差限 解:仍可使用n=1及n=2的Lagrange插值或Newton插值,并应用误差估计。线性插值时,用0.5及0.6两点,用Newton插值 误差限 ,因,故 二次插值时,用0.5,0.6,0.7三点,作二次Newton插值 误差限, 故 15、在-4≤x≤4上给出的等距节点函数表,若用二次插值法 求的近似值,要使误差不超过,函数表的步长h应取多少? 解:用误差估计式, 令因 得

16、若,求和 解:由均差与导数关系 于是 17、若互异,求 的值,这里p≤n+1. 解:,由均差对称性 可知当有 而当P=n+1时 于是得 18、求证 解:只要按差分定义直接展开得 19、已知的函数表

高精度计算

高精度计算 朴素高精度 由于待处理的数据超过了任何一种数据类型所能容纳的范围,因此必须采用数串形式输入,并将其转化为数组。该数组的每一个元素对应一个十进制数,由其下标顺序指明位序号。由于高精度运算可能使得数据长度发生变化,因此除要用整数数组存储数据外,还需要一个整数变量纪录整数数组的元素个数,即数据的实际长度。 type numtype=array[1..255] of integer; var a:numtype; la:byte; s:string; begin readln(s); la:=length(s); for i:=1 to la do a[la-i+1]:=ord(s[i])-ord('0'); end. 高精度加法运算 首先,确定a和b中的最大位数x,然后依照由低位至高位的顺序进行加法运算。在每一次运算中,a当前位加b当前位的和除以10,其整商即为进位,其余数即为和的当前位。在进行了x位的加法后,若最高位有进位(a[x+1]<>0),则a的长度为x+1。 以下只列出关键程序: type numtype=array[1..255] of longint; var a,b,s:numtype; la,lb,ls:longint; procedure plus(var a:numtype;var la:longint;b:numtype;lb:longint); {利用过程实现} var i,x:longint; begin if la>=lb then x:=la else x:=lb; for i:=1 to x do

begin a[i]:=a[i]+b[i]; a[i+1]:=a[i+1]+a[i] div 10; a[i]:=a[i] mod 10; end; while a[x+1]<>0 do x:=x+1; la:=x; {最高位若有进位,则长度增加} end; 高精度减法运算(a>b) 依照由低位至高位的顺序进行减法运算。在每一次位运算中,若出现不够减的情况,则向高位借位。在进行了la位的减法后,若最高位为零,则a的长度减1(一位一位测试,直到确切长度)。 以下只列出关键程序: type numtype=array[1..255] of longint; var a,b:numtype; la,lb: longint; procedure minus(var a:numtype;var la: longint;b:numtype;); var i:word; begin for i:=1 to la do begin if a[i]1) do dec(la); end; 高精度乘法运算 按照乘法规则,从a的第1位开始逐位与c(c为字节型)相乘。在第i位乘法运算中,a的i位与c的乘积必须加上i-1位的进位,然后规整积的i-1位。 以下只列出关键程序:其中C为小于10的整数,如果不是小于10的整数,则按位分解该数。type

数值分析拉格朗日插值法.doc

``````````````````````````````````````````` 数值分析拉格朗日插值法 拉格朗日插值的算法设计及应用 【摘要】 本文简介拉格朗日插值,它的算法及程序和拉格朗日在实际生活中的运用。运用了拉格朗日插值的公式,以及它在MATLAB 中的算法程序,并用具体例子说明。拉格朗日插值在很多方面都可以运用,具有很高的应用价值。 【关键词】 拉格朗日;插值;公式;算法程序;应用;科学。 一、绪论 约瑟夫·拉格朗日(Joseph Louis Lagrange),法国数学家、物理学家。他在数学、力学和天文学三个学科领域中都有历史性的贡献,其中尤以数学方面的成就最为突出。拉格朗日对流体运动的理论也有重要贡献,提出了描述流体运动的拉格朗日方法。数据建模有两大方法:一类是插值方法,另一类是拟合函数一般的说,插值法比较适合数据准确或数据量小的情形。然而Lagrange 插值有很多种,1阶,2阶,…n 阶。我们可以利用拉格朗日插值求方程,根据它的程序求原方程的图像。下面我具体介绍分析一下拉格朗日插值的算法设计及应用。 二、正文 1、基本概念 已知函数y=f(x)在若干点i x 的函数值i y =()i x f (i=0,1,???,n )一个差值问题就是求一“简单”的函数p(x):p(i x )=i y ,i=0,1,???,n, (1) 则p(x)为f(x)的插值函数,而f(x)为被插值函数会插值原函数,0x ,1x ,2x ,...,n x 为插值节点,式(1)为插值条件,如果对固定点-x 求f(-x )数值解,我们称- x 为一个插值节点,f(-x )≈p(-x )称为-x 点的插值,当-x ∈[min(0x ,1x ,2x ,...,n x ),max(0x ,1x ,2x ,...,n x )]

数值计算方法教案_插值方法

复习: 1.数值计算方法的含义 2.误差及误差限 3.误差与有效数字 4.数值计算中应注意的问题 第二章 插值方法 一.插值的含义 问题提出: 已知函数()y f x =在n+1个点01,,,n x x x 上的函数值01,,,n y y y ,求任意一点x '的函数值()f x '。 说明:函数()y f x =可能是未知的;也可能是已知的,但它比较复杂,很难计算其函数值()f x '。 解决方法: 构造一个简单函数()P x 来替代未知(或复杂)函数()y f x =,则用()P x '作为函数值 ()f x '的近似值。 二、泰勒(Taylor )插值 1.问题提出: 已知复杂函数()y f x =在0x 点的函数值()0f x ,求0x 附近另一点0x h +的函数值 ()0f x h +。 2.解决方法: 构造一个代数多项式函数()n P x ,使得()n P x 与()f x 在0x x =点充分逼近。 泰勒多项式为: ()()()()()()()()()200000002!! n n n f x f x P x f x f x x x x x x x n '''=+-+-++- 显然,()n P x 与()f x 在0x x =点,具有相同的i 阶导数值(i=0,1,…,n )。 3.几何意义为:

()n P x 与()f x 都过点()()00,x f x ; ()n P x 与()f x 在点()()00,x f x 处的切线重合; ()n P x 与()f x 在点()()00,x f x 处具有相同的凹凸性; 其几何意义可以由下图描述,显然函数()3f x 能相对较好地在0x 点逼近()f x 。 4.误差分析(泰勒余项定理): ()()()()()()1 101! n n n f P x f x x x n ξ++-=-+,其中ξ在0x 与x 之间。 5.举例: 已知函数()f x =() 115f 。 分析:本题理解为,已知“复杂”函数()f x =0x =100点的函数值为()010f x =,求0x 的附近一点0x +15的函数值()015f x +。 解: (1)构造1次泰勒多项式函数()1P x :()()()()1000P x f x f x x x '=+-。 其中()()010010f x f ==,()1 212 f x x -'=,()()0110020f x f ''==,则有: ()150.05P x x =+ 故有()()111511510.75f P ≈= 误差分析: ()()()()2 1 1151151151002! f P f ξ''-=-

计算方法——插值法综述

计算方法——插值法 11223510 李晓东 在许多实际问题及科学研究中,因素之间往往存在着函数关系,然而,这种关系经常很难有明显的解析表达,通常只是一些离散数值。有时即使给出了解析表达式,却由于表达式过于复杂,使用不便,且不易于计算与分析。解决这类问题我们往往使用插值法:用一个“简单函数”)(x ?逼近被计算函数)(x f ,然后用)(x ?的函数值近似替代)(x f 的函数值。插值法要求给出)(x f 的一个函数表,然后选定一种简单的函数形式,比如多项式、分段线性函数及三角多项式等,通过已知的函数表来确定)(x ?作为)(x f 的近似,概括地说,就是用简单函数为离散数组建立连续模型。 一、 理论与算法 (一)拉格朗日插值法 在求满足插值条件n 次插值多项式)(x P n 之前,先考虑一个简单的插值问题:对节点),,1,0(n i x i =中任一点)0(n k x k ≤≤,作一n 次多项式)(x l k ,使它在该点上取值为1,而在其余点),,1,1,1,0(n k k i x i +-=上取值为零,即 ? ? ?≠==k i k i x l i k 01)( (1.1) 上式表明n 个点n k k x x x x x ,,,,,,1110 +-都是n 次多项式)(x l k 的零点,故可设 )())(())(()(1110n k k k k x x x x x x x x x x A x l -----=+- 其中,k A 为待定系数。由条件1)(=k k x l 立即可得 )())(()(1 110n k k k k k k k x x x x x x x x A ----= +- (1.2) 故 ) ())(()() ())(()()(110110n k k k k k k n k k k x x x x x x x x x x x x x x x x x l --------= +-+- (1.3) 由上式可以写出1+n 个n 次插值多项式)(,),(),(10x l x l x l n 。我们称它们为在1+n 个节点n x x x ,,,10 上的n 次基本插值多项式或n 次插值基函数。 利用插值基函数立即可以写出满足插值条件的n 次插值多项式 )()()(1100x l y x l y x l y n n +++ (1.4)

计算方法简明教程插值法习题解析

第二章 插值法 1.当1,1,2x =-时,()0,3,4f x =-,求()f x 的二次插值多项式。 解: 0120121200102021101201220211,1,2, ()0,()3,()4;()()1 ()(1)(2)()()2()()1 ()(1)(2) ()()6 ()()1 ()(1)(1) ()()3 x x x f x f x f x x x x x l x x x x x x x x x x x l x x x x x x x x x x x l x x x x x x x ==-===-=--==-+-----==------= =-+-- 则二次拉格朗日插值多项式为 2 20 ()()k k k L x y l x ==∑ 0223()4() 14 (1)(2)(1)(1)23 537623 l x l x x x x x x x =-+=---+ -+= +- 2.给出()ln f x x =的数值表 用线性插值及二次插值计算的近似值。 解:由表格知, 01234012340.4,0.5,0.6,0.7,0.8;()0.916291,()0.693147()0.510826,()0.356675()0.223144 x x x x x f x f x f x f x f x ======-=-=-=-=- 若采用线性插值法计算ln 0.54即(0.54)f , 则0.50.540.6<<

2 112 1 221 11122()10(0.6)()10(0.5)()()()()() x x l x x x x x x l x x x x L x f x l x f x l x -==----= =---=+ 6.9314 7(0.6) 5.10826( x x =--- 1(0.54)0.62021860.620219L ∴=-≈- 若采用二次插值法计算ln 0.54时, 1200102021101201220212001122()() ()50(0.5)(0.6) ()() ()() ()100(0.4)(0.6) ()()()() ()50(0.4)(0.5) ()() ()()()()()()() x x x x l x x x x x x x x x x x l x x x x x x x x x x x l x x x x x x x L x f x l x f x l x f x l x --==------==-------= =----=++ 500.916291(0.5)(0.6)69.3147(0.4)(0.6)0.51082650(0.4)(0.5 x x x x x x =-?--+---?--2(0.54)0.61531984 0. 615320L ∴=-≈- 3.给全cos ,090x x ≤≤ 的函数表,步长1(1/60),h '== 若函数表具有5位有效数字,研究用线性插值求cos x 近似值时的总误差界。 解:求解cos x 近似值时,误差可以分为两个部分,一方面,x 是近似值,具有5位有效数字,在此后的计算过程中产生一定的误差传播;另一方面,利用插值法求函数cos x 的近似值时,采用的线性插值法插值余项不为0,也会有一定的误差。因此,总误差界的计算应综合以上两方面的因素。 当090x ≤≤ 时, 令()cos f x x = 取0110,( )606018010800 x h ππ===?= 令0,0,1,...,5400i x x ih i =+= 则5400902 x π = = 当[]1,k k x x x -∈时,线性插值多项式为

相关文档
最新文档