搜档网
当前位置:搜档网 › 数值分析论文-几种插值方法的比较

数值分析论文-几种插值方法的比较

数值分析论文-几种插值方法的比较
数值分析论文-几种插值方法的比较

数值分析论文

——几种插值方法的比较

1.插值法概述

插值法是函数逼近的重要方法之一,有着广泛的应用!在生产和实验中,函数()x f 或者其表达式不便于计算复杂或者无表达式而只有函数在给定点的函数值(或其导数值) ,此时我们希望建立一个简单的而便于计算的函数()x ?,使其近似的代替()x f ,有很多种插值法,其中以拉格朗日(Lagrange)插值和牛顿(Newton)插值为代表的多项式插值最有特点,常用的插值还有Hermite 插值,分段插值和样条插值.这里主要介绍拉格朗日(Lagrange)插值和牛顿(Newton)插值和埃尔米特插值(Hermite 插值)。

2.插值方法的比较 2.1拉格朗日插值 2.1.1基本原理

构造n 次多项式()()()()()x l y x l y x l y x l y x P n n k n

k k n +???++==∑=11000,这

不超过n 次的多项式,其中基函数:

()x l k =

)

...()()...()(()

...()()...()(()1110)1110n k k k k k k k n k k x x x x x x x x x x x x x x x x x x x x ----------+-+-

显然()x l k 满足()i k x l =??

?≠=)

(0)

(1k i k i

此时()()x f x P n ≈,误差()()()=-=x P x f x R n n

(x ))!

1()

(1)1(+++n n n f ωξ 其中ξ∈()b a ,且依赖于x ,()()()()n n x x x x x x x -???--=+101ω. 很显然,当1=n ,插值节点只有两个k x ,1+k x 时

()()()x l y x l y x P k k k k i 11+++=

其中基函数()x l k =11++--k k k x x x x , ()x l k 1+= k

k k

x x x x --+1

2.1.2优缺点

可对插值函数选择多种不同的函数类型,由于代数多项式具有简单和一些良好的特性,故常选用代数多项式作为插值函数。利用插值基函数很容易得到拉格朗日插值多项式,公式结构紧凑,在理论分析中甚为方便,但当插值节点增减时全部插值基函数()x l k ()n k ,,1,0???=均要随之变化,整个公式也将发生变化,这在实际计算中是很不方便的,为了克服这一缺点,提出了牛顿插值可以克服这一缺点。 2.1.3数值实验 程序如下: #include #define TRUE 1 #define FALSE 0 #define N 10 #define M 2 void main(void)

double x[N],y[N],a,l[N];

int i,j,n,flag;

double answer=0.00f;

do{

printf("创建Lagrange插值多项式共用到N组(X,Y)值,请输入N:"); scanf("%d",&n);

if(n<=N&&n>=M) flag=FALSE;

else if(n>N||n<=1)

{

printf("对不起,你输入错误!\n请确保你输入的N满足2<=N<=%d.",N);

printf("\n");

flag=TRUE;

}

}while(flag==TRUE);

printf("\n请输入需要计算的X值:");

scanf("%lf",&a);

for(i=0;i

{

printf("请输入第%d组(X,Y)的值:",i+1);

scanf("%lf%lf",x+i,y+i);

for(i=0;i

if(i!=j) l[i]*=(a-x[j])/(x[i]-x[j]); else continue; answer+=l[i]*y[i]; }

printf("f(%.3lf)=%lf\n",a,answer); }

2.2牛顿插值 2.2.1基本原理

构造n 次多项式

()()[]()[]()()[]()()

101010210010,,,,,,--???-???+?

??+--+-+=n n o n x x x x x x x f x x x x x x x f x x x x f x f x N

称为牛顿插值多项式,其中

1

01010)

()()

,(x x x f x f x x f --=

(二个节点,一阶差商)

2

02110210)

,(),(),,(x x x x f x x f x x x f --= (三个节点,二阶差商)

n n n n x x x x x f x x x f x x x f --=-02111010)

,...,,(),...,,(),...,,( (n+1个节点,n 阶差商)

注意:由于插值多项式的唯一性,有时为了避免拉格朗日余项R n (x)中

n+1阶导数的运算,用牛顿插值公式

()()()()()x x x x f x N x f x R n n n n 10,,,+???=-=ω,

其中()()()()n n x x x x x x x -???--=+101ω. 2.2.2优缺点

牛顿插值法具有承袭性和易变性的特点,当增加一个节点时,只要再增加一项就可以了即

],,,[)())(()()(10101++---+=k k k k k x x x f x x x x x x x N x N 而拉格朗日插值若

要增加一个节点时全部基函数都需要重新算过。牛顿插值法既适合于用来计算函数值,也适合于做理论推导,比如说可用来推导微分方程的数值求解公式。 2.2.3数值实验 程序如下: #include "stdafx.h" #include

void main(int argc,char* argv[]) { int i1,i2,p,j,k,w,n=0;

float x[100],f[100][100],f1[100],x1,x2,N1,N2=1.0,N3=0.0; printf("请输入节点个数w<=100: "); scanf("%d",&w);

for(n=0;n

printf("f(x)=");

scanf("%f",&f1[n]);

}

for(n=0;n

f[n][0]=f1[n];

for(j=1;j

{ k=j;

for(p=0;k

f[k][j]=(f[k][j-1]-f[k-1][j-1])/(x[k]-x[p]); }

printf(" xi f(xi) 1阶差商"); for(i1=1;i1

printf(" %d阶差商",(i1+1));

for(i1=0;i1

{ { if(x[i1]>=0)

if(x[i1]>=10&&x[i1]<100)

printf("\n%.5f ",x[i1]);

else if(x[i1]>=100)

printf("\n%.5f ",x[i1]);

else printf("\n%.5f ",x[i1]);

else if(x[i1]<=-10)

printf("\n%.5f ",x[i1]);

else if(x[i1]<=-100)

printf("\n%.5f ",x[i1]);

else printf("\n%.5f ",x[i1]);

}

for(i2=0;i2<=i1;i2++)

if(f[i1][i2]>=0)

{ if(f[i1][i2]>10)

{ if(f[i1][i2]>=100)

printf("%.5f ",f[i1][i2]);

else printf("%.5f ",f[i1][i2]);

}

else printf("%.5f ",f[i1][i2]); }

else

{ if(f[i1][i2]<=-10)

{ if(f[i1][i2]<=-100)

printf("%.5f ",f[i1][i2]);

else printf("%.5f ",f[i1][i2]);

}

else printf("%.5f ",f[i1][i2]); }

}

printf("\nN%d(x)=%.5f+",n-1,f[0][0]);

for(i1=1;i1

for(j=1;j

if(i1==j)

{ if(f[i1][j]<0)

printf("(%.5f)",f[i1][j]);

else printf("%.5f",f[i1][j]);

for(k=0;k

printf("(x-%.5f)",x[k]);

printf("\n");

if(j

printf(" +");

}

printf("输入节点x1(用3次多项式计算),scanf("%f%f",&x1,&x2);

for(i1=0;i1

if(x1>x[i1]) break;

if((n-i1)>=3)

i2=i1;

else

{ i1=i1-2;

if(i1>=0) i2=i1;

else

{ i2=i1+1;

i1=i2;

}

}

N1=f[i1][0];

for(j=1;j<4;j++,i1++)

{ N2=N2*f[i1+1][i1+1];

for(k=i2;k

N2=N2*(x1-x[k]);

N3=N2+N3;

N2=1.0;

}

N3=N1+N3;

printf("N3(%.5f)=%.5f\n",x1,N3);

N3=0.0;

N1=f[0][0];

for(i1=1;i1

{ for(i2=0;i2

N2=N2*(x2-x[i2]);

N2=N2*f[i1][i1];

N3=N2+N3;

N2=1.0; }

N3=N1+N3;

printf("N%d(%.5f)=%.5f\n",n-1,x2,N3); }

2.3 埃尔米特插值 2.

3.1基本原理

设在1+n 个互不相同的节点b x x x a n ≤

()i i y x H =,()i i m x H =',n i ,,2,1,0???=.

这类问题与前面的插值问题的区别在于不仅要求在节点上的函数值相等,而且还要求导数也相等,甚至要求高阶导数也相等.求次数不超过12+n 的多项式

()x H n 12+使得: 1)()i i n y x H =+12,n i ,,2,1,0???=.

2)()''12i i n y x H =+,n i ,,2,1,0???=.

类似求Lagrange 插值多项式的方法,通过构造基函数的方法.若能够构造出基函数()x i α,()x i β,n i ,,2,1,0???=满足条件 ()=j i x α???≠=).

(,0),

(,1i j i j ;()0'=j i x α,n j ,,2,1,0???=.

()j i x 'β=??

?≠=).

(,0),

(,1i j i j ;()0=j i x β,n j ,,2,1,0???=.

则容易得到()x H n 12+如下:()x H n 12+=()()[]∑=+n

j j j j j x m x y 0

'βα

确定基函数()x i α,()x i β:

()x i α=()()()x l x x x x i i n i j j j i 2,0121?

??

? ??-???? ??--∑≠=,n i ,,2,1,0???=. ()x i β=()()x l x x i i 2-,n i ,,2,1,0???=.

插值余项()()()x H x f x R n 12+-=,若()x f 在()b a ,内的22+n 阶导数存在,则插值余项()x R 满足()x R =

()()()()x n f n n 2

22!

22ωξ++,

()()()()n n x x x x x x x -???--=+101ω,其中()b a ,∈ξ且与x 有关.

2.3.2优缺点

Hermite 插值多项式具有唯一性和承袭性的特点,对相应于条件的()x i α,()x i β的组合形式可以找出尽可能多的条件给出的根,根据多项式的总阶数和根的个数写出表达式,但表达式具有唯一性,可以根据尚未利用的条件解出表达式中的待定系数,在这里待定系数法任适用,但插值节点多时比较麻烦. 2.3.3数值实验 程序如下:

#include

struct HINTEP

{

int n;

double *x;

double *y;

double *dy;

double t;

}hp,ha;

double hermite(struct HINTEP *hp) {

int num,i,j;

double *x,*y,*dy,pio,z,p,q,s;

num=hp->n;

x=hp->x;

y=hp->y;

dy=hp->dy;

pio=hp->t;

z=2.0;

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

{

s=1.0;

for(j=1;j<=num;j++)

if(j!=i) s*=(pio-x[j-1])/(x[i-1]-x[j-1]);

s=s*s;

p=0.0;

for(j=1;j<=num;j++)

if(j!=i) p+=1.0/(x[i-1]-x[j-1]);

q=y[i-1]+(pio-x[i-1])*(dy[i-1]-2.0*y[i-1]*p);

z+=q*s;

}

return(z);

}

main()

{

double x[10]={3.0,5.0,8.0,13.0,17.0,25.0,27.0,29.0,31.0,35.0}; double y[10]={7.0,10.0,11.0,17.0,23.0,18.0,13.0,6.0,3.0,1.0}; double dy[10];

int i;

struct HINTEP ha={10,x,y,dy,19.0};

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

{

dy[i]=-y[i];

}

printf("\npio=%6.3f,z=%e\n\n",ha.t,hermite(&ha)); }

数值分析_数值计算小论文

Runge-Kutta 法的历史发展与应用 摘要Runge-Kutta 法是极其重要的常微分方程数值解法,本文仅就其起源及发展脉络加以简要研究。对Runge 、Heun 以及Kutta 等人的贡献做出适当评述,指出Runge-Kutta 方法起源于Euler 折线法。同时对Runge-Kutta 法的应用做简要研究。 关键词 Euler 折线法 标准四阶Runge-Kutta 法 应用 一、发展历史[1] 1.1 Euler 折线法 在微分方程研究之初,瑞士数学家L.Euler(1707.4—1783.9)做出了开创性的工作。他和其他一些数学家在解决力学、物理学问题的过程中创立了微分方程这门学科。在常微分方程方面,Euler 在1743年发表的论文中,用代换kx y e =给出了任意阶常系数线性微分方程的古典解法,最早引入了“通解”和“特解”的概念。 1768年,Euler 在其有关月球运行理论的著作中,创立了广泛用于求初值问题 00 (,), (1.1)() (1.2)y f x y x x X y x a '=<≤??=? 的数值解的方法,次年又把它推广到二阶方程。欧拉的想法如下:我们选择0h >,然后在00x x x h ≤≤+情况下用解函数的切线 0000()()(,)l x y x x f x y =+- 代替解函数。这样对于点 10x x h =+ 就得到 1000(,)y y hf x y =+。 在11(,)x y 重复如上的程序再次计算新的方向就会得到所谓的递推公式: 11, (,),m m m m m m x x h y y hf x y ++=+=+

数值分析小论文 董安

数值分析作业 课题名称代数插值法-拉格朗日插值法班级Y110201 研究生姓名董安 学号S2******* 学科、专业机械制造及其自动化 所在院、系机械工程及自动化学院2011 年12 月26日

代数插值法---拉格朗日插值法 数值分析中的插值法是一种古老的数学方法,它来自生产实践。利用计算机解决工程问题与常规手工计算的差异就在于它特别的计算方法.电机设计中常常需要通过查曲线、表格或通过作图来确定某一参量,如查磁化曲线、查异步电动机饱和系数曲线等.手工设计时,设计者是通过寻找坐标的方法来实现.用计算机来完成上述工作时,采用数值插值法来完成。因此学好数值分析的插值法很重要。 插值法是函数逼近的重要方法之一,有着广泛的应用 。在生产和实验中,函数f(x)或者其表达式不便于计算复杂或者无表达式而只有函数在给定点的函数值(或其导数值) ,此时我们希望建立一个简单的而便于计算的函数 (x),使其近似的代替f(x),有很多种插值法,其中以拉格朗日(Lagrange)插值和牛顿(Newton)插值为代表的多项式插值最有特点,常用的插值还有Hermit 插值,分段插值和样条插值.本文着重介绍拉格朗日(Lagrange)插值法。 1.一元函数插值概念 定义 设有m+1个互异的实数1x ,2x ,···,m x 和n+1 个实值函数()0 x j , ()1 x j , ···()n x j ,其中n £m 。若向量组 k f =(()0k x j ,()1k x j ,···,() k m x j )T (k=0,1,,n ) 线性无关,则称函数组{()k x j (k=0,1, ,n )}在点集{i x (i=0,1, ,m)}上线性无关;否 则称为线性相关。 例如,函数组{2+x ,1-x ,x+2 x }在点集{1,2,3,4}上线性无关。 又如,函数组{sin x ,n2x ,sin 3x }在点集{0, 3p ,2 3 p ,p }上线性相关。 给点n+1个互异的实数0x ,1x ,···,n x ,实值函数() f x 在包含0x ,1x ,···,n x 的某个区间[] ,a b 内有定义。设函数组 {()k x j (k=0,1, ,n )} 是次数不高于n 的多项式组,且在点集{0x ,1x ,···,n x }上线性无关。

matlab实现数值分析报告插值及积分

Matlab实现数值分析插值及积分 摘要: 数值分析(numerical analysis)是研究分析用计算机求解数学计算问题的数值计算方法及其理论的学科,是数学的一个分支,它以数字计算机求解数学问题的理论和方法为研究对象。在实际生产实践中,常常将实际问题转化为数学模型来解决,这个过程就是数学建模。学习数值分析这门课程可以让我们学到很多的数学建模方法。 分别运用matlab数学软件编程来解决插值问题和数值积分问题。题目中的要求是计算差值和积分,对于问题一,可以分别利用朗格朗日插值公式,牛顿插值公式,埃特金逐次线性插值公式来进行编程求解,具体matlab代码见正文。编程求解出来的结果为:=+。 其中Aitken插值计算的结果图如下: 对于问题二,可以分别利用复化梯形公式,复化的辛卜生公式,复化的柯特斯公式编写程序来进行求解,具体matlab代码见正文。编程求解出来的结果为: 0.6932 其中复化梯形公式计算的结果图如下:

问题重述 问题一:已知列表函数 表格 1 分别用拉格朗日,牛顿,埃特金插值方法计算。 问题二:用复化的梯形公式,复化的辛卜生公式,复化的柯特斯公式计算积分,使精度小于5。 问题解决 问题一:插值方法 对于问题一,用三种差值方法:拉格朗日,牛顿,埃特金差值方法来解决。 一、拉格朗日插值法: 拉格朗日插值多项式如下: 首先构造1+n 个插值节点n x x x ,,,10 上的n 插值基函数,对任一点i x 所对应的插值基函数 )(x l i ,由于在所有),,1,1,,1,0(n i i j x j +-=取零值,因此)(x l i 有因子 )())(()(110n i i x x x x x x x x ----+- 。又因)(x l i 是一个次数不超过n 的多项式,所以只 可能相差一个常数因子,固)(x l i 可表示成: )())(()()(110n i i i x x x x x x x x A x l ----=+- 利用1)(=i i x l 得:

(精品)数值分析课程设计-三次样条插值

《数值分析课程设计-三次样条插值》 报告

掌握三次样条插值函数的构造方法,体会三次样条插值函数对被逼近函数的近似。 三次样条插值函数边界条件由实际问题对三次样条插值在端点的状态要求给出。 以第1 边界条件为例,用节点处二阶导数表示三次样条插值函数,用追赶法求解相关方程组。通过Matlab 编制三次样条函数的通用程序,可直接显示各区间段三次样条函数体表达式,计算出已给点插值并显示各区间分段曲线图。 引言 分段低次样条插值虽然计算简单、稳定性好、收敛性有保证且易在电子计算机上实现,但只能保证各小段曲线在连接处的连续性,不能保证整件曲线的光滑性。利用样条插值,既可保持分段低次插值多项式,又可提高插值函数光滑性。故给出分段三次样条插值的构造过程算法步骤,利用Matlab软件编写三次样条插值函数通用程序,并通过数值算例证明程序的正确性。 三次样条函数的定义及特征 定义:设[a,b] 上有插值节点,a=x1<x2<…xn=b,对应函数值为y1,y2,?yn。若函数S(x) 满 足S(xj) = yj ( j = 1,2, ?,n ), S(x) 在[xj,xj+1] ( j =1,2,?,n-1)上都是不高于三的多项式(为了与其对应j 从1 开始,在Matlab 中元素脚标从1 开始)。当S(x) 在 [a,b] 具有二阶连续导

数。则称S(x) 为三次样条插值函数。要求S(x) 只需在每个子区 间[xj,xj+1] 上确定 1 个三次多项式,设为: Sj(x)=ajx3+bjx2+cjx+dj, (j=1,2,?,n-1) (1) 其中aj,bj,cj,dj 待定,并要使它满足: S(xj)=yj, S(xj-0)=S(xj+0), (j=2,?,n-1) (2) S'(xj-0)=S'(xj+0), S"(xj-0)=S"(xj+0), (j=2,?,n-1) (3) 式(2)、(3)共给出n+3(n-2)=4n-6 个条件, 需要待定4(n-1) 个系数,因此要唯一确定三次插值函数,还要附加2 个边界条件。通常由实际问题对三次样条插值在端点的状态要求给 出。常用边界的条件有以下3 类。 第 1 类边界条件:给定端点处的一阶导数值,S'(x1)=y1',S'(xn) =yn'。 第 2 类边界条件:给定端点处的二阶导数值,S"(x1)=y1",S"(xn) =yn"。特殊情况y1"=yn"=0,称为自然边界条件。 第 3 类边界条件是周期性条件,如果y=f(x)是以b-a 为周期的函 数,于是S(x) 在端点处满足条件S'(x1+0)=S'(xn-0),S"(x+0) =S"(xn-0)。 下以第 1 边界条件为例,利用节点处二阶导数来表示三次样条插值

数值分析小论文

“数值分析”课程 第一次小论文 郑维珍2015210459 制研15班(精密仪器系)内容:数值分析在你所在研究领域的应用。 要求:1)字数2500以上;2)要有摘要和参考文献;3)截至10.17,网络学堂提交,过期不能提交! 数值分析在微流控芯片研究领域的应用 摘要: 作者在硕士期间即将参与的课题是微流控芯片的研制。当前,微流控芯片发展十分迅猛,而其中涉及到诸多材料学、电子学、光学、流体力学等领域的问题,加上微纳尺度上的尺寸效应,理论研究和数值计算都显得困难重重。发展该领域的数值计算,成为重中之重。本文从微流体力学、微传热学、微电磁学、微结构力学等分支入手,简要分析一下数值分析方法在该领域的应用。 微流控芯片(Microfluidic Chip)通常又称芯片实验室(Lab-On-a-Chip ),它是20世纪90年代初由瑞士的Manz和Widmer提出的[1-2],它通过微细加工技术,将微管道、微泵、微阀、微电极、微检测元件等功能元件集成在芯片材料(基片)上,完成整个生化实验室的分析功能,具有减少样品的消耗量、节省反应和分析的时间、高通量和便携性等优点。 通常一个微流控芯片系统都会执行一个到多个微流体功能,如泵、混合、热循环、扩散和分离等,精确地操纵这些流体过程是微流控芯片的关键。因此它的研究不仅需要生命科学、MEMS、材料学、电子学、光学、流体力学等多学科领域的基础理论的支持,还需要很多数学计算。

1)微流体力学计算[3]: 对微管里的流体动力的研究主要包含了以下几个方面:(1)微管内流体的粘滞力的研究;(2)微管内气流液流的传热活动;(3)在绝热或传热的微管内两相流的流动和能量转换。这三方面的研究涵盖了在绝热、传热和多相转换条件下,可压缩和不可压缩流体在规则或不规则的微管内的流动特性研究。 由此,再结合不同的初值条件和边界条件,我们可以得到各种常微分方程或偏微分方程,而求解这些方程,就是需要很多数值分析的知识。例如,文献[4]里就针对特定的初值和边界条件,由软件求解了Navier-Stodes方程: 文献[4]专门有一章节讨论了该方程的离散化和数值求解。 微流体力学主要向两个方面发展:一方面是研究流动非定常稳定特性、分叉解及微尺寸效应下的湍流流动的机理,更为复杂的非定常、多尺度的流动特征,高精度、高分辨率的计算方法和并行算法;另一方面是将宏观流体力学的基本模型,结合微纳效应,直接用于模拟各种实际流动,解决微纳芯片生产制造中提出来的各种问题。 2)微传热方程计算: 常微分、偏微分方程的数值求解应用较为广泛的另一问题就是微流体传热问题。由传热学的相关知识,我们可以达到如下的传热学基本方程: 该方程在二维情况下经过简化和离散,可以得到如教材第三章所讲的“五点差分格式”的方程组,从而采取数值方法求解[5]。 除此之外,微结构芯片在加工和制造过程中也会有很多热学方面的问题,例如文献[6]所反映的注塑成型工艺中,就有大量的类似问题的解决。 3)微电磁学计算: 由于外加电场的作用,电渗流道中会产生焦耳热效应。许多研究者对电渗流道中的焦耳热效应进行了数值模拟研究。新加坡南洋理工大学的G. Y. Tang等在电渗流模型的基础上,考虑了与温度有关的物理系数,在固一液祸合区域内利用

数值分析常用的插值方法

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

常用的插值方法 序言 在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。 早在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

数值分析实验报告-插值、三次样条Word版

实验报告:牛顿差值多项式&三次样条 问题:在区间[-1,1]上分别取n=10、20用两组等距节点对龙格函数21()25f x x 作多项式插值及三次样条插值,对每个n 值,分别画出插值函数及()f x 的图形。 实验目的:通过编程实现牛顿插值方法和三次样条方法,加深对多项式插值的理解。应用所编程序解决实际算例。 实验要求: 1. 认真分析问题,深刻理解相关理论知识并能熟练应用; 2. 编写相关程序并进行实验; 3. 调试程序,得到最终结果; 4. 分析解释实验结果; 5. 按照要求完成实验报告。 实验原理: 详见《数值分析 第5版》第二章相关内容。 实验内容: (1)牛顿插值多项式 1.1 当n=10时: 在Matlab 下编写代码完成计算和画图。结果如下: 代码: clear all clc x1=-1:0.2:1; y1=1./(1+25.*x1.^2); n=length(x1); f=y1(:); for j=2:n for i=n:-1:j f(i)=(f(i)-f(i-1))/(x1(i)-x1(i-j+1)); end end syms F x p ; F(1)=1;p(1)=y1(1); for i=2:n F(i)=F(i-1)*(x-x1(i-1)); p(i)=f(i)*F(i); end

syms P P=sum(p); P10=vpa(expand(P),5); x0=-1:0.001:1; y0=subs(P,x,x0); y2=subs(1/(1+25*x^2),x,x0); plot(x0,y0,x0,y2) grid on xlabel('x') ylabel('y') P10即我们所求的牛顿插值多项式,其结果为:P10(x)=-220.94*x^10+494.91*x^8-9.5065e-14*x^7-381.43*x^6-8.504e-14*x^5+123.36*x^4+2.0 202e-14*x^3-16.855*x^2-6.6594e-16*x+1.0 并且这里也能得到该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.1)。 Fig.1 牛顿插值多项式(n=10)函数和原函数图形 从图形中我们可以明显的观察出插值函数在两端点处发生了剧烈的波动,产生了极大的误差,即龙格现象,当n=20时,这一现象将更加明显。 1.2 当n=20时: 对n=10的代码进行修改就可以得到n=20时的代码。将“x1=-1:0.2:1;”改为“x1=-1:0.1:1;”即可。运行程序,我们得到n=20时的牛顿插值多项式,结果为:P20(x)= 260188.0*x^20 - 1.0121e6*x^18 + 2.6193e-12*x^17 + 1.6392e6*x^16 + 2.248e-11*x^15 - 1.4429e6*x^14 - 4.6331e-11*x^13 + 757299.0*x^12 + 1.7687e-11*x^11 - 245255.0*x^10 + 2.1019e-11*x^9 + 49318.0*x^8 + 3.5903e-12*x^7 - 6119.2*x^6 - 1.5935e-12*x^5 + 470.85*x^4 + 1.3597e-14*x^3 - 24.143*x^2 - 1.738e-14*x + 1.0 同样的,这里得到了该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.2)。

数值分析拉格朗日插值法上机实验报告

课题一:拉格朗日插值法 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)的值。

数值分析常用的插值方法

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

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

求解这类问题,它有很多种插值法,其中以拉格朗日(Lagrange)插值和牛顿(Newton)插值为代表的多项式插值最有特点,常用的插值还有Hermit 插值,分段插值和样条插值。 一.拉格朗日插值 1.问题提出: 已知函数()y f x =在n+1个点01,, ,n x x x 上的函数值01,, ,n y y y ,求任意一点 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 =+++ +,构造()n P x 即是确定n+1个多项式的系数 012,,,,n a a a a 。 3.构造()n P x 的依据: 当多项式函数()n P x 也同时过已知的n+1个点时,我们可以认为多项式函数 ()n P x 逼近于原来的函数()f x 。根据这个条件,可以写出非齐次线性方程组: 20102000 201121112012n 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 ?+++ +=?++++=??? ?+++ +=? 其系数矩阵的行列式D 为范德萌行列式: () 200021110 2 111n n i j n i j n n n n x x x x x x D x x x x x ≥>≥= = -∏

中北大学数值分析小论文

中北大学 《数值分析》 常微分方程初值问题的数值解法 专业: 班级: 学号: 姓名: 日期: 2012.12.26

常微分方程初值问题的数值解法 摘 要 微分方程的数值解法在科学技术及生产实践等多方面应用广泛. 文章分析了构造常微分方程初值问题数值解法的三种常用基本方法,差商代替导数法,数值积分法及待定系数法,推导出了Euler 系列公式及三阶龙格-库塔公式,指出了各公式的优劣性及适用条件,并对Euler 公式的收敛性、稳定性进行了分析。 Abstract The numerical solution of differential equations is widely used in science, technology, production practices and many other fields. This paper analyzed three kinds of basic methods for constructing numerical solutions for initial value problem of ordinary differential equations :difference quotient instead of derivative method, numerical integral method and undetermined coefficients method. At the same time, the paper deduces the Euler series formula and the classical third order Runge-Kutta formula. In addition, the paper pointed out the advantages and disadvantages of each formula and application condition, it also analyzed the convergence and stability of the Euler formula. 1.引言 科学技术及实际生产实践中的许多问题都可归结为微分方程的求解问题,使用较多的是常微分方程初值问题的求解。对于一阶常微分方程的初值问题 000dy /dx f (x,y),y(x )y ,x x b ==<<,其中f 为已知函数,0y 是初始值。如 果函数f 关于变量y 满足Lipschitz 条件,则初值问题有唯一解。只有当f 是一些特殊类型的函数时,才能求出问题的解析解,但一般情况下都满足不了生产实践与科学技术发展的需要,因此通常求其数值解法。 2.主要算法 数值解法是一种离散化的方法,可以求出函数的精确解在自变量一系列离散点处的近似值。基本思想是离散化,首先要将连续区间离散化,对连续区域[]0x ,b 进行剖分01n 1n x x x x b -<<Λ<<=,n n 1n h x x +=-为步长;其次将其函离散

数值分析论文

插值方法总结 摘 要:本文是对学过的插值方法进行了总结使我们更清楚的知道那一种方法适合那一种型。 关键词:插值;函数;多项式;余项 (一)Lagrange 插值 1.Lagrange 插值基函数 n+1个n 次多项式 ∏≠=--= n k j j j k j k x x x x x l 0)( n k ,,1,0 = 称为Lagrange 插值基函数 2.Lagrange 插值多项式 设给定n+1个互异点))(,(k k x f x ,n k ,,1,0 =,j i x x ≠,j i ≠,满足插值条件 )()(k k n x f x L =,n k ,,1,0 = 的n 次多项式 ∏∏ ∏=≠==--==n k n k j j j k j k k n k k n x x x x x f x l x f x L 0 00 ))(()()()( 为Lagrange 插值多项式,称 ∏=+-+=-=n j j x n n x x n f x L x f x E 0)1()()!1()()()()(ξ 为插值余项,其中),()(b a x x ∈=ξξ (二)Newton 插值 1.差商的定义 )(x f 关于i x 的零阶差商 )(][i i x f x f = )(x f 关于i x ,j x 的一阶差商 i j i j j i x x x f x f x x f --= ][][],[ 依次类推,)(x f 关于i x ,1+i x ,……,k i x +的k 阶差商

i k i k i i k i i k i i i x x x x f x x f x x x f --= +-+++++] ,,[],,[],,,[111 2.Newton 插值多项式 设给定的n+1个互异点))(,(k k x f x ,n k ,,1,0 =,j i x x ≠,j i ≠, 称满足条件 )()(k k n x f x N =,n k ,,1,0 = 的n 次多项式 )()](,,,[)](,[][)(10100100---++-+=n n n x x x x x x x f x x x x f x f x N 为Newton 插值多项式,称 ],[,)(],,,[)()()(0 10b a x x x x x x f x N x f x E n j j n n ∈-=-=∏= 为插值余项。 (三)Hermite 插值 设],[)(1b a C x f ∈,已知互异点0x ,1x ,…,],[b a x n ∈及所对应的函数值为 0f ,1f ,…,n f ,导数值为'0f ,' 1f ,…,' n f ,则满足条件 n i f x H f x H i i n i i n ,,1,0,)(,)(' '1212 ===++ 的12+n 次Hermite 插值多项式为 )()()(0 '12x f x f x H j n j j j n j i n βα∏∏=++= 其中 )())((,)]()(21[)(2 2'x l x x x l x l x x x j j j j j j j j ---=βα 称为Hermite 插值基函数,)(x l j 是Lagrange 插值基函数,若],[22b a C f n +∈,插值误差为 220) 22(12)()()! 22() ()()(n x n n x x x x n f x H x f --+= -++ ξ,),()(b a x x ∈=ξξ (四)分段插值 设在区间],[b a 上给定n+1个插值节点 b x x x a n =<<<= 10 和相应的函数值0y ,1y ,…,n y ,求作一个插值函数)(x ?,具有性质

三次样条插值方法的应用

CENTRAL SOUTH UNIVERSITY 数值分析实验报告

三次样条插值方法的应用 一、问题背景 分段低次插值函数往往具有很好的收敛性,计算过程简单,稳定性好,并且易于在在电子计算机上实现,但其光滑性较差,对于像高速飞机的机翼形线船体放样等型值线往往要求具有二阶光滑度,即有二阶连续导数,早期工程师制图时,把富有弹性的细长木条(即所谓的样条)用压铁固定在样点上,在其他地方让他自由弯曲,然后沿木条画下曲线,称为样条曲线。样条曲线实际上是由分段三次曲线并接而成,在连接点即样点上要求二阶导数连续,从数学上加以概括就得到数学样条这一概念。下面我们讨论最常用的三次样条函数及其应用。 二、数学模型 样条函数可以给出光滑的插值曲线(面),因此在数值逼近、常微分方程和偏微分方程的数值解及科学和工程的计算中起着重要的作用。 设区间[]b ,a 上给定有关划分b x x n =<<<= 10x a ,S 为[]b ,a 上满足下面条件的函数。 ● )(b a C S ,2∈; ● S 在每个子区间[]1,+i i x x 上是三次多项式。 则称S 为关于划分的三次样条函数。常用的三次样条函数的边界条件有三种类型: ● Ⅰ型 ()()n n n f x S f x S ''0'',==。 ● Ⅱ型 ()()n n n f x S f x S ''''0'''',==,其特殊情况为()()0''''==n n x S x S 。 ● Ⅲ型 ()() 3,2,1,0,0==j x S x S n j j ,此条件称为周期样条函数。 鉴于Ⅱ型三次样条插值函数在实际应用中的重要地位,在此主要对它进行详细介绍。 三、算法及流程 按照传统的编程方法,可将公式直接转换为MATLAB 可是别的语言即可;另一种是运用矩阵运算,发挥MATLAB 在矩阵运算上的优势。两种方法都可以方便地得到结果。方法二更直观,但计算系数时要特别注意。这里计算的是方法一的程序,采用的是Ⅱ型边界条件,取名为spline2.m 。 Matlab 代码如下: function s=spline2(x0,y0,y21,y2n,x) %s=spline2(x0,y0,y21,y2n,x) %x0,y0 are existed points,x are insert points,y21,y2n are the second

数值分析实验插值与拟合

《数值分析》课程实验一:插值与拟合 一、实验目的 1. 理解插值的基本原理,掌握多项式插值的概念、存在唯一性; 2. 编写MA TLAB 程序实现Lagrange 插值和Newton 插值,验证Runge 现象; 3. 通过比较不同次数的多项式拟合效果,理解多项式拟合的基本原理; 4. 编写MA TLAB 程序实现最小二乘多项式曲线拟合。 二、实验内容 1. 用Lagrange 插值和Newton 插值找经过点(-3, -1), (0, 2), (3, -2), (6, 10)的三次插值公式,并编写MATLAB 程序绘制出三次插值公式的图形。 2. 设 ]5,5[,11 )(2 -∈+= x x x f 如果用等距节点x i = -5 + 10i /n (i = 0, 1, 2, …, n )上的Lagrange 插值多项式L n (x )去逼近它。不妨取n = 5和n = 10,编写MATLAB 程序绘制出L 5(x )和L 10(x )的图像。 (2) 编写MA TLAB 程序绘制出曲线拟合图。 三、实验步骤 1. (1) Lagrange 插值法:在线性空间P n 中找到满足条件: ?? ?≠===j i j i x l ij j i , 0, , 1)(δ 的一组基函数{}n i i x l 0)(=,l i (x )的表达式为 ∏ ≠==--= n i j j j i j i n i x x x x x l ,0),,1,0()( 有了基函数{}n i i x l 0)(=,n 次插值多项式就可表示为 ∑==n i i i n x l y x L 0 )()( (2) Newton 插值法:设x 0, x 1, …, x n 是一组互异的节点,y i = f (x i ) (i = 0, 1, 2, …, n ),f (x )在处的n 阶差商定义为

数值分析作业-三次样条插值

数值计算方法作业 实验4.3 三次样条差值函数 实验目的: 掌握三次样条插值函数的三弯矩方法。 实验函数: dt e x f x t ? ∞ -- = 2 221)(π 实验内容: (1) 编程实现求三次样条插值函数的算法,分别考虑不同的边界条件; (2) 计算各插值节点的弯矩值; (3) 在同一坐标系中绘制函数f(x),插值多项式,三次样条插值多项式的曲线 比较插值结果。 实验4.5 三次样条差值函数的收敛性 实验目的: 多项式插值不一定是收敛的,即插值的节点多,效果不一定好。对三次样条插值函数如何呢?理论上证明三次样条插值函数的收敛性是比较困难的,通过本实验可以证明这一理论结果。 实验内容: 按照一定的规则分别选择等距或非等距的插值节点,并不断增加插值节点的个数。 实验要求: (1) 随着节点个数的增加,比较被逼近函数和三样条插值函数的误差变化情 况,分析所得结果并与拉格朗日插值多项式比较; (2) 三次样条插值函数的思想最早产生于工业部门。作为工业应用的例子,考

虑如下例子:某汽车制造商根据三次样条插值函数设计车门曲线,其中一 算法描述: 拉格朗日插值: 错误!未找到引用源。 其中错误!未找到引用源。是拉格朗日基函数,其表达式为:() ∏ ≠=--=n i j j j i j i x x x x x l 0) ()( 牛顿插值: ) )...()(](,...,,[.... ))(0](,,[)0](,[)()(1102101210100----++--+-+=n n n x x x x x x x x x x f x x x x x x x f x x x x f x f x N 其中????? ?? ?? ?????? --=--= --= -)/(]),...,[],...,[(]...,[..],[],[],,[)()(],[01102110x x x x x f x x x f x x x f x x x x f x x f x x x f x x x f x f x x f n n n n i k j i k j k j i j i j i j i 三样条插值: 所谓三次样条插值多项式Sn(x)是一种分段函数,它在节点Xi(a

数值分析小论文

基于MATLAB曲线拟合对离散数据的处理和研究 摘要:曲线拟合是数值分析中的一种普遍且重要的方法,求解拟合曲线的方法也有很多,这里主要介绍利用MATLAB曲线拟合工具箱对离散数据点做你和处理,并与利用最小二乘法求相应的拟合曲线的方法做对比,突出MATLAB曲线拟合工具箱的优点,并阐述了其适用的范围,最后通过利用MATLAB曲线拟合工具箱对实例中离散数据点的拟合来具体说明它的使用方法和优点。 关键字:数值分析;MATLAB;曲线拟合;最小二乘法 一问题探究 在很多的实际情况中,两个变量之间的关系往往很难用具体的表达式把它表示出来,通常只能通过实际测量得到一些互不相同的离散数据点,需需要利用这些已知的数据点估计出两个变量的关系或工件的具体轮廓,并要得到任意未知数据点的具体数据,这个过程就需要用到拟合或差值方法来实现,这里主要讨论拟合的方法。 曲线拟合可以通过MATLAB编程来完成,通常为了达到更好的讷河效果需要做多次重复修改,对于非线性曲线拟合还需要编写复杂的M-文件,运用MATLAB曲线拟合工具箱来实现离散数据点的曲线拟合是一种直观并且简洁的方法。 二曲线拟合的最小二乘法理论 假设给定了一些数据点(Xi,Yi),人们总希望找到这样的近似的函数,它既能反映所给数据的一般趋势,又不会出现较大的偏差,并且要使构造的函数与被逼近函数在一个给定区间上的偏差满足某种要求。这种思想就是所谓的“曲线拟合”的思想。 曲线拟合和差值不同,若要求通过所有给定的数据点是差值问题,若不要求曲线通过所有给定的数据点,而只要求反映对象整体的变化趋势,拟合问题,曲线拟合问题最常用的解决方法是线性最小二乘法[1],步骤如下: 第一步:先选定一组函数r1(x),r2(x),…,rm(x),m

数值分析小论文论文

对于牛顿型方法的改进 对于函数f(x),假定已给出极小点* x 的一个较好的近似点0x ,则在0x 处将f(x)泰勒展开到二次项,得二次函数()x φ。按极值条件'()0x φ=得()x φ的极小点,用它作为*x 的第一个近似点。然后再在1x 处进行泰勒展开,并求得第二个近似点2x 。如此迭代下去,得到一维情况下的牛顿迭代公式'k 1''k ()() k k f x x x f x +=- (k=0,1,2,…) 对于多元函数f(x),设k x 为f(x)极小点*x 的一个近似值,在k x 处将f(x)进行泰勒展开,保留到二次项得21()()()()()()()()2T T k k k k k k f x x f x f x x x x x f x x x ?≈=+?-+ -?-, 式中 2()k f x ?—f(x)在k x 处的海赛矩阵。 设1k x +为()x ?的极小点,它作为f(x)极小点*x 的下一个近似点,根据极值必要条件 1()0k x ?+?=即21()()()k k k k f x f x x x +?+?-得1 21()()k k k k x x f x f x -+??=-???? (k=0,1,2,…) 上式为多元函数求极值的牛顿法迭代公式。 对于二次函数,f(x)的上述泰勒展开式不是近似的,而是精确地。海赛矩阵是一个常矩阵,其中各元素均为常数。因此,无论从任何点出发,只需一步就可以找到极小点。因为若某一迭代法能使二次型函数在有限次迭代内达到极小点,则称此迭代方法是二次收敛的,因此牛顿方法是二次收敛的。 从牛顿法迭代公式的推演中可以看到,迭代点的位置是按照极值条件确定的,其中并未含有沿下降方向搜寻的概念。因此对于非二次函数,如果采用上述牛顿法公式,有时会使函数值上升,即出现1>k k f f +(x )(x ) 现象。为此对上述牛顿方法进行改进,引入数学规划法的概念。 如果把1 2()()k k k d f x f x -??=-????看作是一个搜索方向,则采取如下的迭代公式 121()()k k k k k k k k x x a d x a f x f x -+??=-=-???? (k=0,1,2,…) 式中 k a —沿牛顿方向进行以为搜索的最佳步长k a 可通过如下极小化过程求得1()()()min k k k k k k k a f x f x a d f x a d +=+=+。由于此种方法每次迭代都在牛顿方向上进 行一维搜索,这就避免了迭代后函数值上升的现象,从而保持了牛顿法二次收敛的特性,而对初始点的选取并没有苛刻的要求。其计算步骤如下:

相关主题