当前位置:文档之家› 拉格朗日多项式插值(C语言)

拉格朗日多项式插值(C语言)

拉格朗日多项式插值(C语言)
拉格朗日多项式插值(C语言)

#include

#include

#include

float lagrange(float *x,float *y,float xx,int n) /*拉¤-格?朗¤¨o日¨?插?值|ì算?法¤?§*/

{

int i,j;

float *a,yy=0.0; /*a作á??为a临¢¨′时o?à变à?量¢?,ê?记?录?拉¤-格?朗¤¨o日¨?插?值|ì多¨¤项?式o?*/

a=(float *)malloc(n*sizeof(float));

for(i=0;i<=n-1;i++)

{

a[i]=y[i];

for(j=0;j<=n-1;j++)

if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]);

yy+=a[i];

}

free(a);

return yy;

}

int main()

{

int i;

int n;

float x[20],y[20],xx,yy;

printf("Input n:");

scanf("%d",&n);

if(n>=20)

{

printf("Error!The value of n must in (0,20)."); getch();return 1;

}

if(n<=0)

{

printf("Error! The value of n must in (0,20)."); getch(); return 1;

}

for(i=0;i<=n-1;i++)

{

printf("x[%d]:",i);

scanf("%f",&x[i]);

}

printf("\n");

for(i=0;i<=n-1;i++)

{

printf("y[%d]:",i);scanf("%f",&y[i]);

}

printf("\n");

printf("Input xx:");

scanf("%f",&xx);

yy=lagrange(x,y,xx,n);

printf("x=%f,y=%f\n",xx,yy);

getch();

}

牛顿(Newton)插值公式

#include

#include

#include"math.h"

#define N 4

using namespace std;

void main()

{ void lin(double x[],double y[],double t,int n);

void newton(double a[],double b[],double t,double h,int n);

double t,h,d; int i,j,n,k;

double x[N]={0.4,0.55,0.65,0.80};

double y[N]={0.41075,0.57815,0.69675,0.88811};

double a[N],b[N];

h=0.1; //h为a等쨨距¨¤节¨2点ì?宽¨a度¨¨,ê?t为a插?值|ì点ì?

t=0.596;

if(!h) cout<<"此??函?¥数oy为a常?ê数oy"<

else

{

if(tx[N-1])

cout<

else

{

cout<<"利¤?用??分¤?段?线?性?插?值|ì:êo"<

lin(x,y,t,N);

cout<<"利¤?用??等쨨距¨¤节¨2点ì?牛?ê顿¨′插?值|ì:êo"<

newton(x,y,t,h,N);

}

}

system ("pause");

}

void lin(double x[],double y[],double t,int n)

{

int i;double w,e,c; //w为a逼à?近¨1值|ìe为a余?¨¤项?

for(i=0;i

{if(t==x[i])

{

cout<<"sin("<

}

else if (t>x[i])

{ w=y[i]*(t-x[i+1])/(x[i]-x[i+1])+y[i+1]*(t-x[i])/(x[i+1]-x[i]);

c=fabs(cos(x[i])) > fabs(cos(x[i+1])) ? fabs(cos(x[i])) : fabs(cos(x[i+1]));

e=c*(t-x[i])*(t-x[i+1]);

cout<<"sin("<

break;

}

}

}

void newton(double a[],double b[],double t,double h,int n)

{

int i,j,c;

double d=0.0;

double r=1.0,k=0.0,m=1.0,s=0.0; //d为a所¨′求¨?近¨1似?值|ì,ê?r为a差?值|ì余?¨¤项?

double f(double b[],int n,int a);

for(i=0;i

if (t

break;

d=b[i-1]; //b[i-1]为a牛?ê顿¨′向¨°前??插?值|ì的ì?第ì¨2一°?个?点ì?函?¥数oy值|ì

k=(t-a[i-1])/h; //k为a(ê?§插?值|ì点ì?—a相¨¤邻¢¨2前??一°?点ì?)ê?/等쨨距¨¤h

c=j=i-1;

for(i=j,j=0;i

{

m*=(k-j)/(j+1);

if((i+1)

s=m * f(b,i,c);

d+=s;

r*=h*(k-j)/(j+1);

}

r*=h*(k-j)/(j+1)*fabs(cos(a[c]));

cout<<"si n("<

}

double f(double b[],int n,int a) //求¨?n阶?á差?分¤?,ê?用??p【?a】?或¨°q【?a】?存??储??én阶?á差?分¤?值|ì

{

double p[N-1];

double q[N-1]; //定?§义°?两¢?个?数oy组á¨|存??储??é差?分¤?

int i,j;

for(i=0;i<=n;i++)

{

p[i]=b[i+1]-b[i];

}

for(i=1;i<=n;i++)

{

for(j=0;j<=(N-i-1);j++)

{

if((i%2)==1)

q[j]=p[j+1]-p[j];

else

p[j]=q[j+1]-q[j];

}

}

if (n%2) return p[a];

else return q[a];

}

拉格朗日插值公式的证明及其应用

拉格朗日插值公式的证明及其应用 摘要: 拉格朗日(Lagrange)插值公式是多项式中的重要公式之一,在理论和实践中都有着广泛的应用.本文阐述了Lagrange 插值的基本理论,譬如:线形插值,抛物插值,Lagrange 多项式等.然后将线形插值,抛物插值,Lagrange 多项式插值分别应用到高中知识中,并且学会用计算机程序来编写.插值法的思想与中国剩余定理一脉相承, 体现了代数中"线性化" (即表示为求和和数乘的形式) 这一基本思路, 大巧若拙.本文的目的是通过介绍拉格朗日插值公式的推导,唯一性,证明过程及其在解题与实际生活问题中的应用来寻找该公式的优点,并且引人思考它在物理,化学等领域的应用.通过实际鉴定过程,利用插值公式计算生活中的成本问题,可以了解它的计算精度高,方法快捷. 关键词: 拉格朗日插值公式 唯一性 证明 解题应用 资产评估 曲线插值问题,直观地说,认为已知的一批数据点()n k k k f x 0,=是准确的,这些数据点所表现的 准确函数关系()x f 是未知的,在这种情况下要作一条近似曲线()x P 且点点通过这些点,插值问题不仅要讨论这种近似曲线()x P 的构造方法,还要讨论点增多时这种近似曲线()x P 是否稳定地收敛于未知函数()x f ,我们先研究一种简单常用的插值——拉格朗日插值. 一.定义,推导及其在解题中的应用 1.线性插值 1.1. 线性插值的定义 假定已知区间[]1,+k k x x 的端点处的函数值()k k x f y =, ()11++=k k x f y ,要求线性插值多项式()x L 1使它满足()k k y x L =1, ()111++=k k y x L . ()x L y 1=的几何意义:通过两点()k k y x ,和()11,++k k y x 的直线, 如图1所示,()x L 1的表达式由几何意义直接给出,即 ()()k k k k k k x x x x y y y x L ---+ =++111 (点斜式), 图1 ()11111++++--+--= k k k k k k k k y x x x x y x x x x x L (两点式). y=L 1x () y=f x () y k+1 y k x k+1 x k o y x

拉格朗日多项式插值(C语言)

#include #include #include float lagrange(float *x,float *y,float xx,int n) /*拉¤-格?朗¤¨o日¨?插?值|ì算?法¤?§*/ { int i,j; float *a,yy=0.0; /*a作á??为a临¢¨′时o?à变à?量¢?,ê?记?录?拉¤-格?朗¤¨o日¨?插?值|ì多¨¤项?式o?*/ a=(float *)malloc(n*sizeof(float)); for(i=0;i<=n-1;i++) { a[i]=y[i]; for(j=0;j<=n-1;j++) if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i]; } free(a); return yy; } int main() { int i; int n; float x[20],y[20],xx,yy; printf("Input n:"); scanf("%d",&n); if(n>=20) { printf("Error!The value of n must in (0,20)."); getch();return 1; } if(n<=0) { printf("Error! The value of n must in (0,20)."); getch(); return 1; } for(i=0;i<=n-1;i++) { printf("x[%d]:",i); scanf("%f",&x[i]); } printf("\n"); for(i=0;i<=n-1;i++) { printf("y[%d]:",i);scanf("%f",&y[i]); }

课题一: 拉格朗日插值法

课题一:拉格朗日插值法 1.实验目的 1.学习和掌握拉格朗日插值多项式。 2.运用拉格朗日插值多项式进行计算。 2.实验过程 作出插值点(1.00,0.00),(-1.00,-3.00),(2.00,4.00)二、算法步骤 已知:某些点的坐标以及点数。 输入:条件点数以及这些点的坐标。 输出:根据给定的点求出其对应的拉格朗日插值多项式的值。 3.程序流程: (1)输入已知点的个数; (2)分别输入已知点的X坐标; (3)分别输入已知点的Y坐标; 程序如下: #include #include #include float lagrange(float *x,float *y,float xx,int n) /*拉格朗日

插值算法*/ { int i,j; float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项*/ a=(float*)malloc(n*sizeof(float)); for(i=0;i<=n-1;i++) { a[i]=y[i]; for(j=0;j<=n-1;j++) if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i]; } free(a); return yy; } int main() { int i; int n; float x[20],y[20],xx,yy; printf("Input n:");

scanf("%d",&n); if(n<=0) { printf("Error! The value of n must in (0,20)."); getch();return 1; } for(i=0;i<=n-1;i++) { printf("x[%d]:",i); scanf("%f",&x[i]); } printf("\n"); for(i=0;i<=n-1;i++) { printf("y[%d]:",i);scanf("%f",&y[i]); } printf("\n"); printf("Input xx:"); scanf("%f",&xx); yy=lagrange(x,y,xx,n); printf("x=%f,y=%f\n",xx,yy); getch(); } 举例如下:已知当x=1,-1,2时f(x)=0,-3,4,求f(1.5)的值。

数值计算方法—拉格朗日插值

数值计算方法作业 专业:测控1002 学号:10540226 姓名:崔海雪

拉格朗日插值的算法及应用 【摘要】 本文简介拉格朗日插值,它的算法及程序和拉格朗日在实际生活中的运用。运用了拉格朗日插值的公式,以及它在MATLAB 中的算法程序,并用具体例子说明。拉格朗日插值在很多方面都可以运用,具有很高的应用价值。 【关键词】 拉格朗日;插值;公式;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 )]时,称为内插,否则称为外插式外推,特别地,当p(x)为不超过n 次多项式时称为n 阶Lagrange 插值。 2、Lagrange 插值公式 (1)线性插值)1(1L 设已知0x ,1x 及0y =f(0x ) ,1y =f(1x ),)(1x L 为不超过一次多项式且满足 )(01x L =0y ,)(11x L =1y ,几何上,)(1x L 为过(0x ,0y ) ,(1x ,1y )的直线,从而得到 )(1x L =0y +0101x x y y --(x-0x ). (2)

拉格朗日插值法理论及误差分析

浅析拉格朗日插值法 目录: 一、 引言 二、 插值及多项式插值的介绍 三、 拉格朗日插值的理论及实验 四、 拉格朗日插值多项式的截断误差及实用估计式 五、 参考文献 一、引言 插值在数学发展史上是个古老问题。插值是和拉格朗日(Lagrange )、牛顿(Newton )、高斯(Gauss )等著名数学家的名字连在一起的。在科学研究和日常生活中,常常会遇到计算函数值等一类问题。插值法有很丰富的历史渊源,它最初来源人们对天体研究——有若干观测点(我们称为节点)计算任意时刻星球的位置(插值点和插值)。现在,人们在诸如机械加工等工程技术和数据处理等科研都有很好的应用,最常见的应用就是气象预报。插值理论和方法能解决在实际中当许多函数表达式未知或形式复杂,如何去构造近似表达式及求得在其他节点处的值的问题。 二、插值及多项式插值 1、插值问题的描述 设已知某函数关系()y f x =在某些离散点上的函数值: 插值问题:根据这些已知数据来构造函数()y f x =的一种简单的近似表达式,以便于计算点,0,1,,i x x i n ≠= 的函数值()f x ,或计算函数的一阶、二阶导数值。 x 0x 0 y y 1 y 1 n y -n y 1 x 1 n x -n x

2、插值的几何意义 插值的几何意义如图1所示: 图1 3、多项式插值 3.1 基本概念 假设()y f x =是定义在区间,a b ????上的未知或复杂函数,但一直该函数在点01n a x x x b ≤<<<≤ 处的函数值01,,n y y y 。找一个简单的函数,例如函数 ()P x ,使之满足条件 (),0,1,2,, i P x y i n == (3.1) 通常把上述01n x x x <<< 称为插值节点,把()P x 称为()f x 的插值多项式,条件(3.1)称为插值条件,并把求()P x 的过程称为插值法。 3.2 插值多项式的存在性和唯一性 如果插值函数是如下m 次的多项式: 1 011()m m m m m P x a x a x a x a --=+++ 那么插值函数的构造就是要确定()m P x 表达式中的m+1个系数 011,,,m m a a a a - 。由于插值条件包含n+1独立式,只要m=n 就可证明插值函数多项式是唯一存在。 实际上,由n+1个插值条件可得

不等距节点下的牛顿插值公式以及拉格朗日插值公式实验课报告

数值分析实验报告三 插值法(2学时) 一实验目的 1.掌握不等距节点下的牛顿插值公式以及拉格朗日插值公式。二实验内容 1.已知函数表: 用牛顿插值公式求) (y的近似值。 102 2. 已知函数表: 用拉格朗日插值公式计算01 x以及所对应的近似值。 =y .5 4.1= 三实验步骤(算法)与结果 1.不等距节点下的牛顿插值公式 Ⅰ.按差商表计算n阶差商

12111[,,,][,,,] [,,,]i i i n i i i n i i i n i n i f x x x f x x x f x x x x x +++++-+++-= - 其中 Ⅱ.按以下公式,带入x 值 00010120101101()() ()[,] ()()[,,]()()()[,,] n n f x f x x x f x x x x x x x f x x x x x x x x x f x x -=+-+--++--- Ⅲ.得出结果()f x 程序代码: #include"stdio.h" #include"math.h" int main() { int a,i,j; printf("输入x 系数的个数:"); scanf("%d",&a); float d,e=0,c; float x[a]; float y[a-1][a]; printf("输入x 的系数:"); for(i=0;i

拉格朗日插值多项式与泰勒多项式的误差分析详全文

i. 拉格朗日插值多項 ii. 式與泰勒多項式的誤差分析 iii. 朱亮儒★ 曾政清☆ 陳昭地★ iv. ★國立臺灣師範大學數學系教授 v. ☆臺北市立建國高級中學數學教師 vi. vii. 摘要:本文旨於提供拉格朗日插值多項式與泰勒多項式誤差項估計值的初 等簡易證明,並探討其應用價值。 viii. 關鍵字:拉格朗日插值多項式、泰勒多項式、誤差項 ix. 一 引言 x. 有鑑於教育部99普通高級中學數學課綱在第一冊多項式的運算為迴避解三元一次方程組,首次出現插值多項式及其應用(以不超過三次插值多項式為限)([1][2][3]),99數學課綱包含插值多項式部分如下: xi. 求 xii. 32()2563f x x x x =-++ xiii. (1)(1)(2)(1)(2)(3)a b x c x x d x x x =+-+--+--- xiv. 中的, , , a b c d . xv. ()f x 除以()()x a x b --的餘式為通過()(),(),,()a f a b f b 的插值多項 式。 xvi. 若f 有,a b 兩實根,則f 可寫成()()()()f x q x x a x b =--的型式。

xvii. 透過因式定理證明插值多項式的唯一性。 xviii. 設通過(1,1),(2,3),(3,7)的多項式為 ()(1)(1)(2)f x a b x c x x =+-+--,求,,a b c 及12f ?? ??? . xix. 插值多項式:通過(11,3),(12,5),(13,8)的多項式可表示為 xx. (12)(13)(11)(13)(11)(12)()358(1112)(1113)(1211)(1213)(1311)(1312) x x x x x x f x ------=? +?+?------, xxi. 求(11.5)f 的值。 xxii. 此處暫不處理下面的題型:「設通過(1, 1), (2, 3), (3, 7)的多項式為 2()f x a bx cx =++,求,,a b c 。」此類題型將在數學的IV 的聯立方程組章節中處理。 xxiii. 此處自然而然讓人想到拉格朗日(Lagrange, J. L., 1736-1816)其人奇事,羅 列如下: xxiv. 他出生於義大利西北部的杜林(Turin),從小就極有數學天分,於18歲開始 撰寫數學論文,在數論上曾提出一個著名的定理:「任意正整數都可以表成四個平方數的和」。 xxv. 他是第一位證明均值定理(The Mean Value Theorem)的大數學家。(均值定理 在高三選修甲微分的單元中會學到([4]),它是僅次於微積分基本定理的極重要的存在定理) xxvi. 他在30歲時,應腓特烈二世的邀請到柏林作為其宮廷數學大師長達20年 之久。

拉格朗日插值、克劳德迭代法

拉格朗日插值 #include"stdio.h" #include"math.h" int main() { int a,i,j; printf("输入x系数(y的系数)的个数:"); scanf("%d",&a); float e,k=1,p=0; float x[a]; float y[a]; printf("输入x的系数(y的系数):"); for(i=0;i

克劳德迭代法 #include"stdio.h" #include"math.h" int main() { float a[3][4]={{2,3,4,6}, {3,5,2,5}, {4,3,30,32}}; float u[3][4]; float l[3][4]; u[0][0]=u[1][1]=u[2][2]=1; l[0][0]=a[0][0]/u[0][0]; u[0][1]=a[0][1]/l[0][0]; u[0][2]=a[0][2]/l[0][0]; u[0][3]=a[0][3]/l[0][0]; l[1][0]=a[1][0]/u[0][0]; l[1][1]=a[1][1]-l[1][0]*u[0][1]; u[1][2]=(a[1][2]-l[1][0]*u[0][2])/l[1][1]; u[1][3]=(a[1][3]-l[1][0]*u[0][3])/l[1][1]; l[2][0]=a[2][0]/u[0][0]; l[2][1]=a[2][1]-l[2][0]*u[0][1] l[2][2]=a[2][2]-l[2][0]*

插值算法之拉格朗日插值

记一下拉格朗日插值公式的推导和一些要点【这里说的都是二维插值,多维上的以此类推】 1、插值问题:在做实验的过程中,往往得到一堆离散的数据,现在想用数学公式模拟这堆离散数据。怎么办,数学家们提出了插值问题。插值问题的提法是这样的给定一堆数据点(x0, y0), (x1, y1), (x2, y2)...(xn, yn),要求一个函数y = f(x) ,要求该函数经过上面所有的数据点。 2、多项式插值及其唯一性:在所有的函数中,多项式函数是最简单的函数,所以只要是人就会想到用多项式函数来作为插值函数,好,以上给定了n+1个点,现在要求一个n次多项式y = an * x^n + ... a1 * x + a0, 使它们经过这n+1个点;通过范德蒙行列式和克莱姆法则,可以判定如果这n+1个点的x值各不相同,那么这个多项式是唯一的。结果唯一,但是用直接法很不好求。现在用别的办法来求之。这就是:拉格朗日多项式 3、拉格朗日多项式的构造,以四个点为例子进行说明 由于函数经过4个点(x0, y0),(x1, y1),(x2, y2),(x3, y3),所以可以设函数为: f(x) = b0(x) * y0 + b1(x) * y1 + b2(x) * y2 + b3(x) * y3 注意:b0(x),...,b3(x)都是x的3次多项式,称之为拉格朗日插值基函数。 由于要求当x为x0时候,f(x) = y0, 所以最简单的做法就是让b0(x0) = 1, b1(x0) = b2(x0) = b3(x0) = 0; 同理可知,在x1,x2,x3点上,插值基函数的值构造如下:

b0(x) b1(x) b2(x) b3(x) x=x0 1 0 0 0 x=x1 0 1 0 0 x=x2 0 0 1 0 x=x3 0 0 0 1 问题1、根据这些值来确定b0(x)的表达式, 由于b0(x1) = b0(x2) = b0(x3) = 0,所以x1, x2, x3是b0(x)的零点,由于b0(x)是三次多项式,所以设 b0(x) = c0 * (x-x1) * (x-x2) * (x-x3) 由于b0(x0) = 1,所以1 = c0 * (x0-x1) * (x0-x2) * (x0-x3) 得到c0 = 1/[(x0-x1)(x0-x2)(x0-x3)] 所以:b0(x) = (x-x1)*(x-x2)*(x-x3)/[(x0-x1)*(x0-x2)*(x0-x3)] 同理可求b1(x)、b2(x),略 问题2、根据上面的表格说明插值基函数的一个性质:无论x取和值,它们的和都为1.【这

数值计算方法编程作业(C语言版)

1:第二章 (1)二分法求解非线性方程: #include #include #define f(x) ((x*x-1)*x-1) void main() { float a,b,x,eps; int k=0; printf("intput eps\n");/* 容许误差*/ scanf("%f",&eps); printf("a,b=\n"); for(;;) {scanf("%f, %f",&a ,&b); if(f(a)*f(b)>=0) /* 判断是否符合二分法使用的条件*/ printf("二分法不可使用,请重新输入:\n"); else break; } do { x=(a+b)/2; k++; if(f(a)*f(x)<0) /* 如果f(a)*f(x)<0,则根在区间的左半部分*/ b=x;

else if(f(a)*f(x)>0) /* 否则根在区间的右半部分*/ a=x; else break; }while(fabs(b-a)>eps);/*判断是否达到精度要求,若没有达到,继续循环*/ x=(a+b)/2; /* 取最后的小区间中点作为根的近似值*/ printf("\n The root is x=%f, k=%d\n",x,k); } 运行结果: intput eps 0.00001 a,b= 2,-5 The root is x=1.324721, k=20 Press any key to continue 总结:本题关键在于两个端点的取值和误差的判断,此程序较容易。二分法收敛速度较快,但缺点是只能求解单根。 (2)牛顿法求解非线性方程: #include #include float f(float x) /* 定义函数f(x) */ { return((-3*x+4)*x-5)*x+6; }

对拉格朗日插值法与牛顿插值法的学习和比较

对拉格朗日插值法与牛顿插值法的学习和比较 摘要:根据对拉格朗日插值法和牛顿插值法的理解,本文主要介绍了拉格朗日插值法和牛顿插值法的相关内容以及它们的区别。 关键词:拉格朗日插值法;牛顿插值法 The leaning and comparison of the Lagrange interpolation and Newton interpolation Abstract: Based on the understanding of the Lagrange interpolation and Newton interpolation ,this paper mainly describes some related knowledge as well as the difference between these two methods. Keywords: Lagrange interpolation ; Newton interpolation 前言 在工程和科学研究中出现的函数是多种多样的。常常会遇到这样的情况:在某个实际问题中,虽然可以断定所考虑的函数)(x f 在区间],[b a 上存在且连续,但却难以找到它的解析表达式,只能通过实验和观测得到在有限个点上的函数值(即一张函数表)。显然,要利用这张函数表来分析函数)(x f 的性态,甚至直接求出其他一些点上的函数值可能是非常困难的。面对这些情况,总希望根据所得函数表(或结构复杂的解析表达式),构造某个简单函数)(x P 作为)(x f 的近似。这样就有了插值法,插值法是解决此类问题目前常用的方法。 如设函数)(x f y =在区间],[b a 上连续,且在1+n 个不同的点b x x x a n ≤≤,,,10 上分别取值n y y y ,,,10 。 插值的目的就是要在一个性质优良、便于计算的函数类Φ中,求一简单函数)(x P ,使 ),,1,0()(n i y x P i i == 而在其他点i x x ≠上,作为)(x f 的近似。 通常,称区间],[b a 为插值区间,称点n x x x ,,,10 为插值节点,称式i i y x P =)(为插值条件,称函数类Φ为插值函数类,称)(x P 为函数)(x f 在节点n x x x ,,,10 处的插值函数。求插值函数)(x P 的方法称为插值法。 插值函数类Φ的取法不同,所求得的插值函数)(x P 逼近)(x f 的效果就不同。它的选择取决于使用上的需要,常用的有代数多项式、三角多项式和有理函数等。当选用代数多项式作为插值函数时,相应的插值问题就称为多项式插值。本文讨论的拉格朗日插值法与牛顿插值法就是这类插值问题。 在多项式插值中,最常见、最基本的问题是:求一次数不超过n 的代数多项式 n n x a x a a x P +++= 10)( 使),,1,0()(n i y x P i i n ==,其中,n a a a ,,,10 为实数。

多项式插值法和拉格朗日插值

多项式插值法和拉格朗日插值 教案一多项式插值法和拉格朗日插值 基本内容提要 1 多项式插值法的基本概念 2 插值多项式的存在性与唯一性分析 3 拉格朗日插值多 项式的构造及截断误差 4 截断误差的实用估计式 5 逐次线性插值法教学目的和要求 1 熟练掌握多项式插值法的基本概念 2 理解插值多项式的存在性与唯一性 3 掌握拉 格朗日插值法 4 掌握截断误差的估计方法 5 理解逐次线性插值法的基本思想,掌握Aitken逐次线性插值法 6 掌握运用拉格朗 日插值法处理问题的基本过程教学重点 1 拉格朗日插值基函数及拉格朗日插值多项式的构造 2 拉格朗日插值多项式的截断 误差分析 3 逐次线性插值法的基本思想教学难点 1 插值多项式存在唯一性条件的讨论分析 2 插值误差的分析与估计 3 Aitken逐次线性插值法的计算过程课程类型新知识理论课教学方法 结合提问,以讲授法为主教学过程 问题引入 实际问题中许多变量间的依赖关系往往可用数学中的函数概念刻画,但在多数情况下,这些函数的表达式是未知的,或者函数已知,但形式十分复杂。基于未知函数或复杂函数 的某些已知信息,如何构造这些函数的近似表达式?如何计算这些函数在其它点处的函数值?所构造的近似表达式与真实函数的误差是多少?插值理论与方法就是解决这些问题的 有效工具之一。 §2.1 多项式插值 2.1.1 基本概念 假设f(x)是定义在区间[a,b]上的未知或复杂函数,但已知该函数在点a≤x0 P(xi)=yi,i=0,1,2,L,n,即在给定点xi处,P(x)与f(x)是相吻合的。 (2.1) 把P(x)称为f(x)的插值多项式(函通常把上述x0 数), f(x)称为被插函数。[a,b]称为插值区间,条件(2.1)称为插值条件,并把 求P(x)的过程称为插值法。

拉格朗日插值法C语言的实现

实验 一 .拉格朗日插值法C 语言的实现 1.实验目的: 进一步熟悉拉格朗日插值法。 掌握编程语言字符处理程序的设计和调试技术。 2.实验要求: 已知:某些点的坐标以及点数。 输入:条件点数以及这些点的坐标 。 输出:根据给定的点求出其对应的拉格朗日插值多项式的值 。 3.程序流程: (1)输入已知点的个数; (2)分别输入已知点的X 坐标; (3)分别输入已知点的Y 坐标; (4)通过调用函数lagrange 函数,来求某点所对应的函数值。 拉格朗日插值多项式如下: 0L ()()0,1,n n j k k j j k x y l x y j n ====∑…… 其中00()()0,1,,()k k x x l x k n x x -= =-k-1k+1n k k-1k k+1k n ……(x-x )(x-x ) …(x-x )…………(x -x )(x -x ) …(x -x ) 程序流程图:

↓ 程序如下: #include #include #include float lagrange(float *x,float *y,float xx,int n) /*拉格朗日插值算法*/ { int i,j; float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项式*/ a=(float *)malloc(n*sizeof(float)); for(i=0;i<=n-1;i++) { a[i]=y[i]; for(j=0;j<=n-1;j++) if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i]; } free(a); return yy; } int main() { int i; int n; float x[20],y[20],xx,yy; printf("Input n:"); scanf("%d",&n); if(n>=20) { printf("Error!The value of n must in (0,20)."); getch();return 1; } if(n<=0) { printf("Error! The value of n must in (0,20)."); getch(); return 1; } for(i=0;i<=n-1;i++) {

编程实现拉格朗日(lagrange)插值法(C语言)

编程实现拉格朗日(lagrange)插值法(C语言) 程序如下: #include #include <> #include <> float lagrange(float *x,float *y,float xx,int n) /*拉格朗日插值算法*/ { int i,j; float *a,yy=; /*a作为临时变量,记录拉格朗日插值多项式*/ a=(float *)malloc(n*sizeof(float)); for(i=0;i<=n-1;i++) { a[i]=y[i]; for(j=0;j<=n-1;j++) if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i]; } free(a); return yy; } int main() { int i; int n; float x[20],y[20],xx,yy; printf("Input n:"); scanf("%d",&n); if(n>=20) { printf("Error!The value of n must in (0,20)."); getch();return 1; } if(n<=0) { printf("Error! The value of n must in (0,20)."); getch(); return 1; } for(i=0;i<=n-1;i++) { printf("x[%d]:",i); scanf("%f",&x[i]); } printf("\n"); for(i=0;i<=n-1;i++) { printf("y[%d]:",i);scanf("%f",&y[i]);

拉格朗日插值法理论及误差分析

目录: 一、 引言 二、 插值及多项式插值的介绍 三、 拉格朗日插值的理论及实验 四、 拉格朗日插值多项式的截断误差及实用估计式 五、 参考文献 一、引言 插值在数学发展史上是个古老问题。插值是和拉格朗日(Lagrange )、牛顿(Newton )、高斯(Gauss )等著名数学家的名字连在一起的。在科学研究和日常生活中,常常会遇到计算函数值等一类问题。插值法有很丰富的历史渊源,它最初来源人们对天体研究——有若干观测点(我们称为节点)计算任意时刻星球的位置(插值点和插值)。现在,人们在诸如机械加工等工程技术和数据处理等科研都有很好的应用,最常见的应用就是气象预报。插值理论和方法能解决在实际中当许多函数表达式未知或形式复杂,如何去构造近似表达式及求得在其他节点处的值的问题。 二、插值及多项式插值 1、插值问题的描述 设已知某函数关系()y f x =在某些离散点上的函数值: 插值问题:根据这些已知数据来构造函数()y f x =的一种简单的近似表达式,以便于计算点,0,1,,i x x i n ≠=的函数值()f x ,或计算函数的一阶、二阶导数 值。 2、插值的几何意义 x x 0 y y 1 y 1 n y -n y 1 x 1 n x -n x

插值的几何意义如图1所示: 图1 3、多项式插值 基本概念 假设()y f x =是定义在区间,a b ????上的未知或复杂函数,但一直该函数在点01n a x x x b ≤<< <≤处的函数值01,,n y y y 。找一个简单的函数,例如函数 ()P x ,使之满足条件 (),0,1,2, ,,i P x y i n == () 通常把上述01n x x x << < 称为插值节点,把()P x 称为()f x 的插值多项 式,条件()称为插值条件,并把求()P x 的过程称为插值法。 插值多项式的存在性和唯一性 如果插值函数是如下m 次的多项式: 1011()m m m m m P x a x a x a x a --=++ + 那么插值函数的构造就是要确定()m P x 表达式中的m+1个系数 011,, ,m m a a a a -。由于插值条件包含n+1独立式,只要m=n 就可证明插值函数多 项式是唯一存在。 实际上,由n+1个插值条件可得

拉格朗日多项式插值

拉格朗日多项式插值法浅析 摘要 拉格朗日插值多项式是一种最常见的多项式插值法,也是一种最常用的逼近工具。“学以致用 ”是每一门学科都致力追求的境界,数学自然也不例外。下面,探讨拉格朗日插值法的基本原理、如何构造拉格朗日多项式、拉格朗日多项式的误差界,并用 MATLAB 程序来实现这一数学算法的自动化,为复杂的分析研究提供了一条数学算法的捷径。 【关键词】:拉格朗日多项式 算法实现 MATLAB 在科学研究和实际的工程设计中,几乎所有的问题都可以用)(x f y =来表示其某种内在规律的数量关系。但理想化的函数关系在实际工程应用中是很难寻找 的,对于那些没有明显解析式的函数关系表达式则只能通过实验观察的数据,利用多项式对某一函数的进行逼近,使得这个逼近函数能够反映)(x f 的特性,而且利用多项式就可以简便的计算相应的函数值。例如我们不知道气温随日期变化的具体函数关系,但是我们可以测量一些孤立的日期的气温值,并假定此气温随日期变化的函数满足某一多项式。这样,利用已经测的数据,应用待定系数法便可以求得一个多项式函数f (x )。应用此函数就可以计算或者说预测其他日期的气温值。一般情况下,多项式的次数越多,需要的数据就越多,而预测也就越 准确。当然,构造组合多项式方法比较多,如线性方程求解、拉格朗日系数多项式以及构造牛顿多项式的分段差分和系数表等等,这里只对拉格朗日多项式插值法进行深入探讨。 一、拉格朗日多项式插值算法基本原理 函数)(x f y =在区间[a,b]上有定义,在是[ a,b]上取定的 N + 1个互异节点, 且在这些点处的函数值)(0x f , )(1x f ,…,)(n x f 为已知, 即 yi =f (xi ) , (N i ...1,0=),若存在一个和)(x f 近似的函数)(x P N ,满足 )()(i i N x f x P = (N i ...1,0=) (1) 则称 φ(x) 为 f (x) 的一个插值函数, 点i x 为插值节点,(1)称为插值条件, 区间[a,b]称为插值区间, 而误差函数)()(x P x f E N N -=称为插值余项。即是求一个不超过N 次多项式0111...)(a x a x a x a x P N N N N N ++++=-- (N i ...1,0=) 满足 )()(i i N x f x P = (N i ...1,0=)

数值分析 算法C语言程序

一、拉格朗日插值 #include #include #include void Lagrange(float s) { double x[5]={0.2,0.4,0.6,0.8,1.0},y[5]={0.98,0.92,0.81,0.64,0.38},f,L=0; int i,j; for (i=0;i<5;i++) { f=1; for (j=0;j<5;j++) if(j!=i) f=(s-x[j])/(x[i]-x[j])*f; L+=f*y[i]; } printf("输出:%f\n",L); } void main() { float x; printf("输入插值点:"); scanf("%f",&x); Lagrange(x); } 二、牛顿插值 #include #include #include int ND(float s) { double x[5]={0.2,0.4,0.6,0.8,1.0},y[5]={0.98,0.92,0.81,0.64,0.38},p=0,g,f; int i,j,k; for (i=0;i<5;i++) { for (j=4;j>i;j--) { f=x[j]-x[j-i-1];y[j]=(y[j]-y[j-1])/f;} g=y[i+1]; for (k=0;k<=i;k++) g=g*(s-x[k]); p=p+g; } printf("输出插值点函数值:%f\n",p+y[0]); return 1; }

Lagrange插值程序1

在Matlab中,可以编写如下程序来利用Lagrange插值公式进行计算: function f=Lagrange(x,fx,inx) n=length(x);m=length(inx); for i=1:m; z=inx(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x(j))/(x(k)-x(j)); end end s=p*fx(k)+s; end f(i)=s; end plot(x,fx,'O',inx,f) x=[1:12] fx=[12 234 34 -1 34 2 5 23 34 9 45 23] xi=[1:0.2:12] Lagrange(x,fx,xi) 得出结果: 12.0000 -60.5937 18.2765 124.9778 202.5952 234.0000 223.3757 184.1249 131.4738 78.4253 34.0000 2.9467 -13.6885 -17.5810 -12.0379 -1.0000 11.7556 23.1624 31.1611 34.7730 34.0000 29.6054 22.8332 15.1153 7.8099 2.0000 -1.6307 -2.8397 -1.7907 1.0404 5.0000 9.4024 13.6643 17.4033 20.4834 23.0000 25.2037 27.3769 29.6858 32.0400 34.0000 34.7742 33.3426 28.7320 20.4439 9.0000 -3.4848 -12.8605 -12.8873 4.0592 4 5.0000 112.3788 197.1817 267.9699 254.3439 23.0000

拉格朗日插值法课程设计

摘要 插值法是函数逼近的一种重要方法,是数值计算的基本课题.数学上来说,拉格朗日插值法可以给出一个恰好穿过二维平面上若干个已知点的多项式函数.Lagrange 插值是n次多项式插值,其成功地用构造插值基函数的方法,解决了求n次多项式插值函数问题.Lagrange插值的基本思想是将待求的n次多项式插值函数改写成另一种表示方式,再利用插值条件确定其中的待定函数,从而求出插值多项式. 拉格朗日插值法是一种很实用的插值方法,可以应用在渔业资源评估中、化学中、工程中、工业中、机械设计与制造领域,以及计算机方面.本课题意在将拉格朗日插值法应用到实际中,主要通过程序的编写(有拉格朗日插值法的Matlab和C语言实现)将算法在计算机中实现,求得相应的解.进一步体现拉格朗日插值法在解决问题时的实际意义. 关键词插值基函数;插值多项式;Lagrange插值;算法

Abstract Interpolation function approximation is a kind of important method, numerical calculation is the basic subject.Mathematical speaking,Lagrange interpolation method can give a right through the two dimensional plane several known point polynomial https://www.doczj.com/doc/0014949721.html,grange interpolation is n times polynomial interpolation,which succeeded in structure interpolation basis function method,solve the on times polynomial interpolation function problem. Lagrange interpolation basic idea is to will stay for n times polynomial interpolation function rewritten into another means,reuse interpolation condition to determine the required function,so as to find out the interpolation polynomial. Lagrange interpolation method is a very practical interpolation method, can be used in fishery resources evaluation,chemistry,engineering, industry, mechanical design and manufacturing,and computers to.This topic will be Lagrange interpolation method was used to practice,mainly through the process of writing(with Lagrange interpolation method of Matlab and C language implementation)algorithm is realized in computer,get the corresponding solution.Further reflected Lagrange interpolation method in solving problems of practical significance. Keywords interpolation basis function;Interpolation polynomial;Lagrange interpolation;algorithm

相关主题
文本预览
相关文档 最新文档