当前位置:文档之家› 分段三次Hermite插值

分段三次Hermite插值

分段三次Hermite插值
分段三次Hermite插值

分段三次Hermite 插值

1. 目的意义:

可以得到在插值区间上光滑的分段插值多项式

2. 数学模型(数学公式):

???????∈??????∈∈=-]

,[),(],[),(],[),()(1212101n n n x x x x H x x x x H x x x x H x H

'221'122

13211321)()())(())]((2[))]((2[i i

i i i i i i i i

i i i i i i i i i y h x x x x y h x x x x y h x x x x h y h x x x x h H --+--+--++--+=------

3. 算法程序:

#include

#include

#define m 4

#define n 5

void main()

{

int i,k;

float x[n+1],y[n+1],yy[n+1],h,z[m];

printf("请按行输入一系列的x值:\n");

for(k=0;k

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

printf("请按行输入一系列的y值:\n");

for(k=0;k

scanf("%f",&y[k]);

printf("请输入一系列的y'的值:\n");

for(k=0;k

scanf("%f",&yy[k]);

printf("请按行输入这%d个插值点:\n",m+1);

for(i=0;i

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

printf("%f\n",z[i]);

for(i=0;i

for(k=0;k

if(z[i]>=x[k]&&z[i]<=x[k+1])

{

h=pow((z[i]-x[k+1])/(x[k]-x[k+1]),2.0)*(1+2*(z[i]-x[k])/(x[k+1 ]-x[k]))*y[k]+pow((z[i]-x[k])/(x[k+1]-x[k]),2.0)*(1+2*(z[i]-x[k +1])/(x[k]-x[k+1]))*y[k+1]+pow((z[i]-x[k+1])/(x[k]-x[k+1]),2.0 )*(z[i]-x[k])*yy[k]+pow((z[i]-x[k])/(x[k+1]-x[k]),2.0)*(z[i]-x[k

+1])*yy[k+1];

printf("h(%f)=%f\n",z[i],h);

}

}

4.运行结果:

数值分析实验六(分段三次Hermite插值)

《数值分析》实验报告 实验编号:实验六 课题名称:分段三次Hermite插值 一、算法介绍 给定的函数为f(x)=1/(25*x*x+1),将给定区间分成10分,得到11个节点:x[0],x[1],...,x[10],构造插值函数的基函数。当x在(x[0],x[1])区间上时,H[0] = (x-x[0])*[((x-x[1])/(x[0]-x[1]))^2]。其余的区间为H[0]=0。h[0]= [1+2*(x-x[0])/(x[1]-x[0])]*[((x-x[1])/(x[0]-x[1]))^2]。当x在[x[i-1],x[i]] (i=1,2,3, (9) 区间上时,H[i]=(x-x[i])*[((x-x[i-1])/(x[i]-x[i-1]))^2],h[i]=[1+2*(x-x[i])/(x[i-1]-x[i])]*[((x-x[i-1])/(x[i]-x[i-1]))^2)。当x在(x[i],x[i+1]](i=1,2,3,…,10)区间上其余的区间为H[i]=(x-x[i])[((x-x[i+1])/(x[i]-x[i+1]))^2],h[i]=[1+2*(x-x[i])/(x[i+1]-x[i])]*[((x-x[i+1 ])/(x[i]-x[i+1]))^2]。其余区间上均为H[i]=0,h[i]=0(i=1,2,…,10)。当x在(x[9],x[10])区间上时,H[10] = (x-x[9])(((x-x[10])/(x[9]-x[10]))^2).其余的区间为H[10]=0.h[10]= (1+2*((x-x[9])/(x[10]-x[9])))(((x-x[10])/(x[9]-x[10]))^2).其余区间h[10]=0。构造函数H(x) =∑(y[i]*h[i]+y'[i]*H[i],(i=0,1,…,10)。 二、程序代码 // testV iew.cpp : implementation of the CTestV iew class // #include "stdafx.h" #include "test.h" #include "testDoc.h" #include "testView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTestV iew IMPLEMENT_DYNCREA TE(CTestView, CView) BEGIN_MESSAGE_MAP(CTestView, CView) //{{AFX_MSG_MAP(CTestView) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CV iew::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTestV iew construction/destruction CTestView::CTestV iew() { // TODO: add construction code here }

三次样条插值法

natural cubic spine二阶导数求解 1 Natural cubic spine is The formula (3.37) in book ‘Numerical Recipes in Fortran 77’ is: (1) Where . Formula (1) can be simplified as: (2) Where: (3) Formula (2) can be written as: (4) This is a ‘m=n-2’ dimensional equation, then change the subscript. Take: , and (4) can be changed into: (5) To solve equation (5), we can get , then we can get . 三次样条插值法使用时,一般要对y均分取值。

2 The second derivative is known: , (6) When : (7) When : (8) So formula (4) can be written as: (9) Then we can solve equation (9).

3 The first derivative is known. The formula (3.35) is : (6) Where: Case 1: , (6) can be changed into: (7) And , (7) can be written as: (8) (9) Case 2: , (6) can be written as: (10) And , (10) can be written as: (11) (12) , (13) j=2:

三次样条插值方法的应用

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

数值计算(数值分析)实验4-分段三次埃尔米特(hermite)插值【c程序实现+流程图】

实验四分段三次埃尔米特插值 (一)实验目的 掌握分段三次埃尔米特插值算法。 (二)实验项目内容 1.写出计算步骤和流程图。 2.对每种算法分别用C或c#程序实现。 3.调试程序。可用以下数据进行调试。 已知函数y=1/(1+x2)在区间[0,3]上取等距插值节点,求区间[0,3]上的分段三次埃尔米特插值函数,并利用它求出f(1.5)的近似值(0.3075)。 x0 1 2 i y 1 0.5 0.2 i y 0 -0.5 -0.16 i (三)主要仪器设备 微机 (四)实验室名称 公共计算机实验室 (五)实验报告撰写 实验四分段三次埃尔米特插值 实验报告 一、流程图

二、 程序代码 #include #include float f0(float x) N Y 开始 输入i x ,i y ,x y=0, j=0 t=1 i j i x x t t x x -=- i=0,…j-1,j+1,…n i y y ty =+ j=n? 输出y 结束 j=j+1

{ return((x-1)*(x-1)*(2*x+1)); } float f1(float x) { return(x*x*(-2*x+3)); } float g0(float x) { return(x*(x-1)*(x-1)); } float g1(float x) { return(x*x*(x-1)); } void main() {float x0,x1,x,y0,y1,yy0,yy1,h,p; printf("输入x0,x1,x,y0,y1和yy0,yy1的取值"); scanf("%f%f%f%f%f%f%f",&x0,&x1,&x,&y0,&y1,&yy0,&yy1); h=x1-x0; p=y0*f0((x-x0)/h)+y1*f1((x-x0)/h)+h*yy0*g0((x-x0)/h)+h*yy1*g1((x- x0)/h); printf("%f\n",p); } 三、运行结果【截图】

分段三次hermite插值C程序

分段三次hermite插值C程序 XYYZ #include #include #define m 4 #define n 5 void main() { int i,k; float x[n+1],y[n+1],yy[n+1],h,z[m]; printf("请按行输入一系列的x值:\n"); for(k=0;k=x[k]&&z[i]<=x[k+1]) { h=pow((z[i]-x[k+1])/(x[k]-x[k+1]),2.0)*(1+2*(z[i]-x[k])/(x[k+1]-x[k]))*y[k]+pow((z[i]-x[k])/(x[k +1]-x[k]),2.0)*(1+2*(z[i]-x[k+1])/(x[k]-x[k+1]))*y[k+1]+pow((z[i]-x[k+1])/(x[k]-x[k+1]),2.0)*(z [i]-x[k])*yy[k]+pow((z[i]-x[k])/(x[k+1]-x[k]),2.0)*(z[i]-x[k+1])*yy[k+1]; printf("h(%f)=%f\n",z[i],h); } } 附:程序运行结果如下: 请按行输入一系列的x值: 0.1 0.2 0.3 0.4 0.5 0.6 请按行输入一系列的y值: 0.09983 0.19867 0.29552 0.38942 0.47943 0.56462 请输入一系列的y'的值: 0.99500 0.98007 0.95534 0.92106 0.87758 0.82534

实验六:分段三次Hermit插值

《数值分析》实验报告 实验序号:实验六题目名称: 分段三次Hermit插值 学号: 姓名: 、 任课教师: 马季骕专业班级:计算机科学与技术(非师范) 1、题目描述 这是一种光滑的分段插值,给定[a,b]上的节点a=x0

m=0; x1=x1+0.00001; for(i=0;i<=10;i++) { if(i==0&&x1>=ax[0]&&x1<=ax[1]) { n=(1+2*((x1-ax[0])/(ax[1]-ax[0])))*((x1-ax[1])/(ax[0]-ax[ 1]))*((x1-ax[1])/(ax[0]-ax[1]));// 插值基函数h(x) tt=ay[0]*n; //插值基函数与其函数值线性组合 h=(x1-ax[0])*((x1-ax[1])/(ax[0]-ax[1]))*((x1-ax[1])/(ax[0 ]-ax[1]));//插值基函数H(x) tt1=a[0]*h;//插值基函数与其一阶导数值线性组合 m=tt+tt1+m;//把插值基函数做线性组合 } else { if(x1>=ax[i-1]&&x1<=ax[i]) { n=(1+2*((x1-ax[i])/(ax[i-1]-ax[i])))*((x1-ax[i-1])/(ax[i]-ax[i-1]))*((x1-ax[i-1])/(ax[i]-ax[i-1])); tt=ay[i]*n; h=(x1-ax[i])*((x1-ax[i-1])/(ax[i]-ax[i-1]))*((x1-ax[i -1])/(ax[i]-ax[i-1])); tt1=a[i]*h; m=tt+tt1+m; } else { if(x1>ax[i]&&x1<=ax[i+1]) { n=(1+2*((x1-ax[i])/(ax[i+1]-ax[i])))*((x1-ax[i+ 1])/(ax[i]-ax[i+1]))*((x1-ax[i+1])/(ax[i]-ax[i+1]));

数值分析实验报告-插值、三次样条(教育教学)

实验报告:牛顿差值多项式&三次样条 问题:在区间[-1,1]上分别取n=10、20用两组等距节点对龙格函数2 1()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.0202e-1 4*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)。

Hermite插值函数

数值分析实验报告 任课教师:马季骕班级:11级计算机科学与技术 1实验目的及要求 2程序的源代码 3实验操作 4实验结果及分析 1实验目的及要求 学会Hermite插值法,并应用该算法于实际问题. (1)给定函数y=f(x)在n各不同的插值节点xi(i=1,…,n)的函数值yi=f(xi) (i=1,…,n),用厄米特(Hermite)插值多项式求函数在x初的函数值y。 (2)Hermite插值多项式: (4)如果有错,修改直至运行成功,查看运行结果; (5)根据所求函数,画出图形。 (6)查看原函数的图形与逼近函数图形的近似程度。 2 程序的源代码 // LDlg.cpp : implementation file // #include "stdafx.h" #include "L.h" #include "LDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg)

分段Hermite插值

6.6 分段埃尔米特插值及其MATLAB 程序 6.6.2 分段埃尔米特插值的MATLAB 程序 调用格式一:YI=interp1(X,Y,XI,'pchip') 调用格式二:YI=interp1(X,XI,'pchip') 例6.6.5 试用MA TLAB 程序计算例6.6.1中在各小区间中点处分段三次埃尔米特插值)(2/1+i n x H 及其相对误差. 解 在MATLAB 工作窗口输入程序 >> h=0.2;x0=-1:h:1;y0=1./(1+25.*x0.^2); xi=-0.9:h:0.9; fi=1./(1+25.*xi.^2); yi=interp1(x0,y0,xi,'pchip'); Ri=abs((fi-yi)./fi); xi,fi,yi,Ri,i=[xi',fi',yi',Ri'] 运行后屏幕显示各小区间中点x i 处的函数值f i ,插值s i ,相对误差值R i (略). 6.6.3 作有关分段埃尔米特插值图形的MATLAB 程序 作有关分段埃尔米特插值图形的MATLAB 主程序 function H=hermitetx(x0,y0,xi,x,y) H= interp1(x0,y0,xi,'pchip'); Hn= interp1(x0,y0,x,'pchip'); plot(x0,y0,'o',x,Hn,'-',xi,H,'*',x,y,'-.') legend('节点(xi,yi)', '分段埃尔米特插值函数','插值点(x,H)','被插值函数y') 我们也可以直接在在MATLAB 工作窗口编程序,例如, >> x0 =-6:6; y0 =sin(x0); xi = -6:.25:6; yi = interp1(x0,y0,xi,'pchip'); x=-6:0.001:6; y=sin(x); plot(x0,y0,'o',xi,yi,x,y,':'), legend('节点(xi,yi)','分段埃尔米特插值函数','被插值函数y=sinx') title(' y=sinx 及其分段埃尔米特插值函数和节点的图形') >> x0 =-6:6; y0 =cos(x0); xi = -6:.25:6;yi = interp1(x0,y0,xi,'pchip'); x=-6:0.001:6; y=cos(x); plot(x0,y0,'o',xi,yi,x,y,':'), legend('节点(xi,yi)','分段埃尔米特插值函数','被插值函数y=cosx') title(' y=cosx 及其分段埃尔米特插值函数和节点的图形') 例6.6.6 设函数211 )(x x f +=定义在区间]5,5[-上,节点(X (i ),f (X (i )))的横坐标 向量X 的元素是首项a =-5,末项b =5,公差h =1.5的等差数列,构造三次分段埃尔米特插值函数)(3,x H n .把区间]5,5[-分成20等份,构成20个小区间,用MA TLAB 程序计算各小区间中点i x 处)(3,x H n 的值,并作出节点,插值点,)(x f 和)(3,x H n 的图形. 解 在MATLAB 工作窗口输入程序 >>x0=-5:1.5:5; y0=1./(1+x0.^2); x1=-4.75:0.5:4.75; x=-5:0.001:5; y=1./(1+x.^2); H= hermitetx(x0,y0,x1,x,y) title('函数y=1/(1+x^2)及其分段埃尔米特插值函数,插值,节点(xi,yi) 的图形') 运行后屏幕显示各小区间中点i x 处)(3,x H n 的值,出现节点,插值点,)(x f 和)(3,x H n 的图形(略). 例6.6.7 设函数x x x f cos 5.0)(-=定义在区间],[ππ-上,取7=n ,按等距节点构造分段埃尔米特插值函数)(3,7x H ,用MA TLAB 程序计算各小区间中点i x 处)(3,7x H 的值,

分段三次hermite插值

C语言课程设计报告 课程名称:程序设计语言 组员:学号:魏文豪135******** 汤恒 135******** 彭建平135******** 指导教师:李华刚 2015年 12 月 13 日

流程图

代码! #include #include #define m 4 #define n 5 void main() { int i,k; float x[n+1],y[n+1],yy[n+1],h,z[m]; printf("请按行输入一系列的x值:\n"); for(k=0;k=x[k]&&z[i]<=x[k+1]) { h=pow((z[i]-x[k+1])/(x[k]-x[k+1]),2.0)*(1+2*(z[i]-x[k])/(x[k+1]-x[k]))*y[k]+pow( (z[i]-x[k])/(x[k+1]-x[k]),2.0)*(1+2*(z[i]-x[k+1])/(x[k]-x[k+1]))*y[k+1]+pow((z[i ]-x[k+1])/(x[k]-x[k+1]),2.0)*(z[i]-x[k])*yy[k]+pow((z[i]-x[k])/(x[k+1]-x[k]),2.0 )*(z[i]-x[k+1])*yy[k+1]; printf("h(%f)=%f\n",z[i],h); } }

分段三次Hermite插值

分段三次Hermite 插值 1. 目的意义: 可以得到在插值区间上光滑的分段插值多项式 2. 数学模型(数学公式): ???????∈??????∈∈=-] ,[),(],[),(],[),()(1212101n n n x x x x H x x x x H x x x x H x H '221'122 13211321)()())(())]((2[))]((2[i i i i i i i i i i i i i i i i i i i y h x x x x y h x x x x y h x x x x h y h x x x x h H --+--+--++--+=------ 3. 算法程序: #include #include #define m 4 #define n 5 void main() { int i,k; float x[n+1],y[n+1],yy[n+1],h,z[m];

printf("请按行输入一系列的x值:\n"); for(k=0;k=x[k]&&z[i]<=x[k+1]) { h=pow((z[i]-x[k+1])/(x[k]-x[k+1]),2.0)*(1+2*(z[i]-x[k])/(x[k+1 ]-x[k]))*y[k]+pow((z[i]-x[k])/(x[k+1]-x[k]),2.0)*(1+2*(z[i]-x[k +1])/(x[k]-x[k+1]))*y[k+1]+pow((z[i]-x[k+1])/(x[k]-x[k+1]),2.0 )*(z[i]-x[k])*yy[k]+pow((z[i]-x[k])/(x[k+1]-x[k]),2.0)*(z[i]-x[k

数值计算数值分析实验分段三次埃尔米特hermite插值c程序实现流程图

数值计算数值分析实验分段三次埃尔米特 h e r m i t e插值c程序实 现流程图 集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)

实验四分段三次埃尔米特插值 (一)实验目的 掌握分段三次埃尔米特插值算法。 (二)实验项目内容 1.写出计算步骤和流程图。 2.对每种算法分别用C或c#程序实现。 3.调试程序。可用以下数据进行调试。 已知函数y=1/(1+x2)在区间[0,3]上取等距插值节点,求区间[0,3]上的分段三次埃尔米特插值函数,并利用它求出f(1.5)的近似值 (0.3075)。 (三)主要仪器设备 微机 (四)实验室名称 公共计算机实验室 (五)实验报告撰写 实验四分段三次埃尔米特插值 实验报告 一、流程图

二、程序代码 #include #include float f0(float x)

{ return((x-1)*(x-1)*(2*x+1)); } float f1(float x) { return(x*x*(-2*x+3)); } float g0(float x) { return(x*(x-1)*(x-1)); } float g1(float x) { return(x*x*(x-1)); } void main() {float x0,x1,x,y0,y1,yy0,yy1,h,p; printf("输入x0,x1,x,y0,y1和yy0,yy1的取值"); scanf("%f%f%f%f%f%f%f",&x0,&x1,&x,&y0,&y1,&yy0,&yy1); h=x1-x0; p=y0*f0((x-x0)/h)+y1*f1((x-x0)/h)+h*yy0*g0((x- x0)/h)+h*yy1*g1((x-

数学实验“等距节点插值,Hermite插值,分段插值(线性,二次,三次)”实验报告(内含matlab程序)

西京学院数学软件实验任务书

实验十六实验报告 一、实验名称:等距节点插值,Hermite 插值,分段插值(线性,二次,三次)。 二、实验目的:进一步熟悉等距节点插值,Hermite 插值,分段插值(线性,二次,三次)。 三、实验要求:运用Matlab/C/C++/Java/Maple/Mathematica 等其中一种语言完成程序设计。 四、实验原理: 1.等距节点插值: 差分分为前向差分、后向差分和中心差分三种,它们的记法及定义如下所示: n 阶前向差分公式111()()()n n n i i i f x f x f x --+?=?-? n 阶后向差分公式111()()()n n n i i i f x f x f x ---?=?-? n 阶中心差分公式11112 2 ()()()n n n i i i f x f x f x δδδ--+-=- 其中:? -前向差分;? -后向差分;δ -中心差分。 假设000()()()()i i i i f x f x f x f x δ?=?==,为了方便计算,构造差分表(()i i f f x =)。 这里只说明前向牛顿插值,其多项式可表示为如下形式:

0()()N x N x th =+ 20000()()()()12n t t t f x f x f x f x n ?? ?? ?? =+?+?++? ? ? ??? ?? ?? 其中h 为步长,10h x x =-,且的取值范围为0t n ≤≤。 2.埃尔米特插值: 埃尔米特插值法满足在节点上等于给定函数值,而且在节点上的导数值也等于给定的导数值,对于有高阶导数的情况,埃尔米特插值多项式比较复杂,在实际应用中,常常遇到的是函数值与一阶导数值给定的情况,在这种情况下,n 个节点12,,n x x x 的埃尔米特插值多项式()H x 的表达形式如下所示: 1()[()(2)]n i i i i i i i H x h x x a y y y ==--+∑ 其中(),''()i i i i y y x y y x == 2 111 ( ),n n j i i j j i j i j j i j i x x h a x x x x ==≠≠-==--∑ ∏ 3.分段插值: 给定插值节点i x 、节点函数值i y 及对应的导数值 '(0,1,2,,)i y i N = ,则满足下面条件 (),'()'i i i i p x y p x y == 的分段埃尔米特插值函数()p x 的表达式如下所示:

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