分段线性插值

合集下载

ami插值法第三讲(分段线性与Hermite插值)

ami插值法第三讲(分段线性与Hermite插值)
则Hermite插值多项式为 插值多项式为
H i ( x j ) = 0 ( i , j = 0,1, , n) h' i ( x j ) = 0 ( i , j = 0,1, , n)
H ( x) =
∑ [h ( x ) y
n i=0 i
i
+ H i ( x ) y'i ]
从而可设 :
hi ( x ) = [a + b( x x i )] [l i ( x )]
2
这里l 为拉格朗日插值基函数 这里 i(x)为拉格朗日插值基函数
把 hi ( x i ) = 1 h' i ( x i ) = 0 ( i = 0,1, , n) 代入得
a = 1; b = 2 l ' i ( x i )
从而有 :
同理可得
hi ( x ) = [1 2( x x i )l i ' ( x i )] [l i ( x )]
i ( x )是线性函数
则称 是 上的分段线性插值多项式。 则称(x)是f(x)在[a ,b]上的分段线性插值多项式。 在 上的分段线性插值多项式
二、分段线性插值多项式的构造
分段表达式
x x i +1 x xi ( x) = yi + y i +1 ( x i ≤ x ≤ x i +1 ) x i x i +1 x i +1 x i
第2章插值 章
第4节
Hermite插值
一、 Hermite插值的基本思路
插值问题的一般要求:
( xi ) = yi
( i = 0 ,1, 2 ,... n )
插值问题的较高要求:
(1 ) (2)

插值法——线性分段插值

插值法——线性分段插值

插值法——线性分段插值 1.插值函数%%分段线性插值function PLI = Piecewise_linear_interpolation(X,f,precision)[m,n] = size(X);a = min(X);b = max(X);X = sort(X);F = subs(f,X);for k = 1:n-1B = Basic_fun(X,k);I = B(1)*F(k)+B(2)*F(k+1);PLI{1,k} = [X(k),X(k+1)];PLI{2,k} = I;t{k} = X(k):(X(k+1)-X(k))/precision:X(k+1);T{k} = subs(I,t{k});Y_real{k} = subs(f,t{k});endfor k = 1:n-1t_((precision+1)*(k-1)+1:(precision+1)*k) = t{k};T_((precision+1)*(k-1)+1:(precision+1)*k) = T{k};Y_real_((precision+1)*(k-1)+1:(precision+1)*k)= Y_real{k};endh = figure;set(h,'color','w');plot(X,F,'r*',t_,T_,'g',t_,Y_real_,'b');xlabel('x shaft');ylabel('y shaft');legend('F:节点对应函数值','T:分段线性插值函数图像','Y_real:真实函数图像');title('分段线性插值');grid onend 2.基函数%%基函数,max(X)>k>0function BF = Basic_fun(X,k)X = sort(X);syms x;BF(1) = (x-X(k+1))/(X(k)-X(k+1));BF(2) = (x-X(k))/(X(k+1)-X(k));end 3.拟合值函数%%线性插值拟合值function LIV = Linear_interpolation_value(X,f,precision,x_value)[m,n] = size(X);a = min(X);b = max(X);X = sort(X);Answer = Piecewise_linear_interpolation(X,f,precision);for i = 1:n-1if x_value >= X(i) && x_value <= X(i+1)s = i;endendLIV{1,1} = '线性插值拟合值';LIV{2,1} = vpa(subs(Answer{2,s},x_value),6);LIV{1,2} = '真实值';LIV{2,2} = vpa(subs(f,x_value),6);LIV{1,3} = '误差';LIV{2,3} = abs(LIV{2,1}-LIV{2,2});end 4.例⼦clear allclcX = -5:1:5;syms x;f = - 0.08858*x^8 + 3.694*x^7 - 64.7*x^6 + 617.8*x^5 - 3490.0*x^4 + 11820.0*x^3 - 23150.0*x^2 + 23580.0*x - 9319.0; precision = 200;%%分段线性插值disp('分段线性插值');Piecewise_linear_interpolation(X,f,precision) 结果分段线性插值S =2×10 cell 数组列 1 ⾄ 4{1×2 double} {1×2 double} {1×2 double} {1×2 double} {1×1 sym } {1×1 sym } {1×1 sym } {1×1 sym }列 5 ⾄ 8{1×2 double} {1×2 double} {1×2 double} {1×2 double} {1×1 sym } {1×1 sym } {1×1 sym } {1×1 sym }列 9 ⾄ 10{1×2 double} {1×2 double}{1×1 sym } {1×1 sym }>> S{2,:}ans =(227077586881*x)/50000 + 37695704689/2500ans =(3983468847*x)/2000 + 60987657739/12500ans =(7723057429*x)/10000 + 30518164433/25000ans =(2518396259*x)/10000 + 4494858583/25000ans =(3136314129*x)/50000 - 9319ans =(465835271*x)/50000 - 9319ans =(422501*x)/10000 - 1113617/25000ans =4111433/25000 - (622509*x)/10000ans =- (271*x)/80 - 151661/12500ans =2072089/2500 - (10681481*x)/50000 图像如下。

分段线性插值

分段线性插值

分段线性插值分段线性插值是一种在机器学习、数学、信号处理等领域中广泛应用的方法。

分段线性插值的主要目的是为漏洞、持续时间等数据展示提供更好的视觉效果,同时也可以使数据更容易进行处理。

在分段线性插值中,每一段数据都可以看作是一条直线段。

通过在相邻数据点之间插入一条直线来实现插值。

每个数据点或任意数段可以称为一个插值区间,插值区间内部的数据点都采用一条直线进行插值,直线的斜率由插值区间上下数据点构成。

例如:在一个区间(x1,y1)和(x2,y2)之间进行插值,其中x1<x<x2。

那么,我们可以使用线性公式y = mx + b来估计数据点的y值。

方程中m是插值区间的斜率,通过公式m = (y2-y1)/(x2-x1)计算。

而b是在插值区间x1和x2之间的截距,通过公式b = y1 - m x1计算。

最后,我们就可以通过已知的数据点,估计同一段中任意点的y值。

下面我们通过一个实例来进一步解释分段线性插值的应用。

比如我们有一组工作时间数据如下:|年份| 工作时间 ||----|----|| 2010 | 6.5 || 2011 | 7.0 || 2013 | 7.5 || 2015 | 8.0 |目前,我们需要在2012年估计工作时间。

首先,我们需要找到分段线性插值的区间。

2012年的数据点在2011年和2013年之间。

因此,我们可以使用2011年和2013年之间的数据点进行插值。

然后,通过计算斜率来确定m和b的值。

斜率可以通过公式m = (y2-y1)/(x2-x1)来计算。

2011年和2013年的工作时间分别是7.0和7.5,年份分别是2011和2013。

因此,斜率为:(7.5-7.0)/(2013年-2011年)= 0.25/2 = 0.125插值区间的y截距b可以通过公式b = y1 - m x1来计算。

这使得我们可以计算出截距:接下来,我们就可以使用斜率和截距来计算2012年的工作时间,这将是我们所需的数据点的估计值:y = mx + b= 0.125 * 2012 + 258.375= 259.875。

计算方法 1.3 分段线性插值

计算方法 1.3 分段线性插值
易知, S1 ( x )为是一条折线函数,在每个小区间 [xi , xi1 ] 上可表示为:
x x x x i 1 i ˆ S ( x ) y y , x x x 1 i i 1 i i 1 x x x x i i 1 i 1 i 于是, S1 ( x ) 是在 [ a , b ] 上是连续函数。
x [xj , xj ] 1 x [xj, xj 1] 其他
2)在插值节点 x 0 上,插值基为:
2 ( x x ) l ( x ) x [ x ,x ] 0 0 0 1 B ( x ) 0 0 其他 3)在插值节点 x n 上,插值基为:
2 ( x x ) l ( x ) n n B ( x ) n 0
1
左,右连接起来!
x
j1
xj
x
j1
2 2 H ( x ) 1 2 l ( x ) l ( x ) y 1 2 l ( x ) l ( x ) y 3 j 1 j j j j 1 j 1 2 2 ( x x ) l ( x ) y ( x x ) l ( x ) y j j j j 1j 1 j 1
k axb
提示:类似于前面的误差估计。 几点说明:
1)只要节点间距充分小,插值法总能获得所要求的精度。 2)局部性。如果修改某个数据,则插值曲线仅在某个局部范围内受影响。
插值节点 x 上,取值为 0 .即 k,k j 1 lj (x k ) 0 k j k j
2 )在每个小区间 [x 上,插值基 lj (x )都是线性函数 . i, x i 1]
基于以上两方面,我们观察
1
右 左
x
j1

分段线性插值

分段线性插值

三次样条插值
插值函数S(x): (1)S(x)在字区间[xi,xi+1]的表达式Si(x)都是次数不高 于3的多项式; (2) Si(x)=yi; (3) S(x)在整个区间[a,b]上有连续的二阶导数。
hk xk 1 xk
yk 1 yk hk S ( x) yk 1 [ (2mk 1 mk )](x xk 1 ) hk 6
[fnodes,minnq,rnw,rnq,ifail]=e01sef(x,y,z) [cz(i,j),ifail]=e01sff(x,y,z,rnw,fnodes,cx(I),cy(j))
数据拟合
已知平面上n个点,寻求函数f(x)在某种准则下与数据点 最为接近,即曲线拟合得好。
‘nearest’-----最近邻点插值;
‘linear’-------线性插值;-----缺省 ‘spline’-------三次样条插值; ‘cubic’--------三次插值。
散乱数据插iddata(x,y,z,cx,cy,’method’)
返回在网格(cx,cy)处的函数值,注意此处cx行向 量,cy列向量。 (2)插值函数e01sef和e01sff 基于Shephard插值法,两个函数必须同时使用。
mk S ( xk ) mk 1 mk mk 1 2 hk ( x xk 1 ) ( x xk 1 )3 k 2 6hk 1 hk 1 hk y y y yk 1 6 k ( k 1 k k ) n+1个未知量,n-1个方程组 hk 1 hk hk hk 1
二维插值
通过全部已知节点f(xi,yi)=zij(i=0,1,2, …m;j=1,1,2, …n), 构造一二元函数z=f(x,y),然后再利用f(x,y)插值,即 z*= f(x*,y *);分为网格节点插值和散乱节点插值两种。

分段线性插值

分段线性插值

摘要用函数来表示变量间的数量关系广泛应用于各学科领域,但是在实际问题中,往往是通过实验、观测以及计算等方法,得到的是函数在一些点上的函数值。

如何通过这些离散数据找到函数的一个满足精度要求且便于使用的近似表达式,是经常遇到的问题。

对于这类问题我们解决的方法为插值法,而最常用也最简单的插值方法就是多项式插值。

当然用插值法得到的近似表达式必须满足插值条件即假设给定了n+1个点的自变量的值以及函数值,近似函数必须要过这n+1(x)通个点。

多项式插值,从几何角度看,就是寻求n次代数曲线y=Pn过n+1个点作为f(x)的近似。

但是随着插值节点个数的增加,高次插值多项式的近似效果并不理想。

根据大量实验得出,在进行高次多项式插值时,会出现龙格现象。

龙格(Runge)现象即当n趋于无穷大时,x在某一邻域内,f(x)收敛,而在这个区域外f(x)发散。

因此,为了解决这样的一个问题,我们可以通过缩小插值区间的办法达到减小误差的目的,所以本实验将针对低次分段插值多项式来做具体的讨论和学习。

关键词:龙格现象分段差值1、实验目的1)通过对分段线性插值算法程序的编写,提高自己编写程序的能力2)体会分段线性插值是如何消除龙格现象的。

3)用实验报告的形式展现,提高自己在写论文方面的能力2、算法理论设在节点处的函数值为,i=0,1,,n。

为了提高近似程度,可以考虑用分段线性插值来逼近原函数,这时的插值函数为分段函数:在区间上的线性函数为误差为:易见,是平面上以点为节点的折线,有如下的特点:1.在上为次数不超过一次的多项式;2.;3.;如果,由线性插值的误差公式得到令,则有关于整体误差:可以按如下方式考虑,若记则对任一都有于是,当时,说明分段线性插值收敛于。

3、数值算例已知点坐标如下表所示:xiyi用分段线性插值法,求解当x为时,对应y的值解:具体程序如下所示:#include ""float Fdline(float x[],float y[],float x1,int len){int i=0;float s=0;for(i=0;i<len-1;i++){if(x1>=x[i] && x1<x[i+1])break;}s=(x1-x[i])/(x[i-1]-x[i])*y[i-1]+(x1-x[i-1])/(x[i]-x[i-1])* y[i];return s;}float Fdline(float x[],float y[],float x1,int len);void main(){float x[]={,,,,};float y[]={,,,,};int len=sizeof(x)/sizeof(x[0]);float x1=0;float s=0;printf("请输入要求解的x1的值:\n");scanf("%f",&x1);s=Fdline(x,y,x1,len);printf("经过分段三次Hermite插值的结果为:\n");printf("%f\n",s);}运行结果:5、对结果进行分析根据分段线性插值的原理,可以看出分段线性插值虽然有很好的收敛性质,但却不是光滑的,所以线性插值的结果和实际的结果差距较大。

分段线性插值

分段线性插值

1、实验目的:设在区间[a,b]上,给定n+1个插值节点a=X0<X1<X2<。

<Xn=b和相应的函数值y0,y1,y2,。

,yn ,求一个插值函数φ(x),具有下面性质:(1)φ(x)=yj(j=0,1,2,…,n)(2)φ(x)在每一个小区间[xj,yj+1]上是线性函数。

2、算法分析:●分段线性插值的算法思想:分段线性插值需要在每个插值节点上构造分段线性插值基函数,然后再作它们的线性组合。

分段线性插值基函数的特点是在对应的插值节点上函数值取1,其它节点上函数值取0。

插值基函数如下:有了基函数就可以直接写出分段线性插值函数的表达式。

●具体程序设计:for(i=0;i<=20;i++) //选取节点{ax[i]=-1+((2/20.0)*i); //选取上的21个对称的节点ay[i]=1.0/(1+25*ax[i]*ax[i]);}x1=-1;while(x1<=1){m=0;x1=x1+0.00001;for(i=0;i<=20;i++){if(i==0&&x1>=-1&&x1<=-0.9){n=ay[0]*((x1-ax[1])/(ax[0]-ax[1])); //计算并和相应的函数值组合m=n+m;}else{if(x1>=ax[i-1]&&x1<=ax[i]) //计算并和相应的函数值组合{n=ay[i]*((x1-ax[i-1])/(ax[i]-ax[i-1]));m=n+m;}else{if(x1>ax[i]&&x1<=ax[i+1]){n=ay[i]*((x1-ax[i+1])/(ax[i]-ax[i+1]));m=m+n;}else{if(i==19&&x1>ax[19]&&x1<=ax[20]){n=ay[20]*((x1-ax[19])-(ax[20]-ax[19]));//计算并和相应的函数值组合m=n+m;}}}}}}3、实验结果截图:在[-1,1]区间上选取了21个等分节点的分段线性插值函数的图像如下:4、程序代码// SHIYAN456View.cpp : implementation of the CSHIYAN456View class //#include "stdafx.h"#include "SHIYAN456.h"#include "SHIYAN456Doc.h"#include "SHIYAN456View.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CSHIYAN456ViewIMPLEMENT_DYNCREATE(CSHIYAN456View, CView)BEGIN_MESSAGE_MAP(CSHIYAN456View, CView)//{{AFX_MSG_MAP(CSHIYAN456View)ON_COMMAND(ID_FFunction, OnFFunction)ON_COMMAND(ID_Lagrange, OnLagrange)ON_COMMAND(ID_Subsection, OnSubsection)ON_COMMAND(ID_Hermite, OnHermite)//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CSHIYAN456View construction/destructionCSHIYAN456View::CSHIYAN456View(){// TODO: add construction code here}CSHIYAN456View::~CSHIYAN456View(){}BOOL CSHIYAN456View::PreCreateWindow(CREATESTRUCT& cs)// TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT csreturn CView::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////////////////// CSHIYAN456View drawingvoid CSHIYAN456View::OnDraw(CDC* pDC){CSHIYAN456Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereAfxGetMainWnd()->SetWindowText("实验四五六函数图像");for(int k=650;k<=690;k++){pDC->SetPixel(k,55,RGB(255,0,0));pDC->SetPixel(k,85,RGB(0,255,0));pDC->SetPixel(k,115,RGB(0,0,255));pDC->SetPixel(k,145,RGB(0,255,255));}pDC->TextOut(700,50,"原函数图像");pDC->TextOut(700,80,"Lagrange插值函数图像");pDC->TextOut(700,110,"分段线性插值函数图像");pDC->TextOut(700,140,"Hermite插值函数图像");for(int i=6;i<=600;i++)pDC->SetPixel(400,i,RGB(0,0,0));pDC->TextOut(395,4,"y");for(int j=100;j<=700;j++)pDC->SetPixel(j,500,RGB(0,0,0));pDC->TextOut(700,500,"x");//pDC->MoveTo(400,500);}/////////////////////////////////////////////////////////////////////////////// CSHIYAN456View printingBOOL CSHIYAN456View::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CSHIYAN456View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {// TODO: add extra initialization before printing}void CSHIYAN456View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {// TODO: add cleanup after printing}/////////////////////////////////////////////////////////////////////////////// CSHIYAN456View diagnostics#ifdef _DEBUGvoid CSHIYAN456View::AssertValid() const{CView::AssertValid();}void CSHIYAN456View::Dump(CDumpContext& dc) const{CView::Dump(dc);}CSHIYAN456Doc* CSHIYAN456View::GetDocument() // non-debug version is inline {ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSHIYAN456Doc)));return (CSHIYAN456Doc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////// CSHIYAN456View message handlersvoid CSHIYAN456View::OnFFunction(){// TODO: Add your command handler code hereCClientDC dr(this);COLORREF rgb=RGB(255,0,0);double x1,y1,x,y;x1=-1.0;y1=1/(1+25*x1*x1);x=x1*200+400;y=-y1*200+500;while(x1<=1){dr.MoveTo(int(x),int(y));x1=x1+0.00001;y1=1/(1+25*x1*x1);x=x1*200+400;y=-y1*200+500;dr.SetPixel(int(x),int(y),rgb);}}void CSHIYAN456View::OnLagrange(){// TODO: Add your command handler code hereCClientDC dr(this);COLORREF rgb=RGB(0,255,0);int i,j;double x1=0,y1=0,x=0,y=0,m=0,n=0,ax[100],ay[100];for(i=0;i<=10;i++){ax[i]=-1+((2/10.0)*i);ay[i]=1.0/(1+25*ax[i]*ax[i]);}x1=-1;y1=1/(1+25*x1*x1);x=x1*200+400;y=-y1*200+500;dr.MoveTo(int(x),int(y));while(x1<=1){m=0;for(i=0;i<=10;i++){n=1;for(j=0;j<=10;j++){if(i!=j)n=((x1-ax[j])/(ax[i]-ax[j]))*n;}m=ay[i]*n+m;}x=x1*200+400;y=-m*200+500;dr.SetPixel(int(x),int(y),rgb);x1=x1+0.00001;}}void CSHIYAN456View::OnSubsection(){// TODO: Add your command handler code hereCClientDC dr(this);COLORREF rgb=RGB(0,0,255);int i;double x1=0,y1=0,x=0,y=0,m=0,n=0,ax[100],ay[100];for(i=0;i<=20;i++){ax[i]=-1+((2/20.0)*i);ay[i]=1.0/(1+25*ax[i]*ax[i]);}x1=-1;y1=1/(1+25*x1*x1);x=x1*200+400;y=-y1*200+500;dr.MoveTo(int(x),int(y));while(x1<=1){m=0;x1=x1+0.00001;for(i=0;i<=20;i++){if(i==0&&x1>=-1&&x1<=-0.9){n=ay[0]*((x1-ax[1])/(ax[0]-ax[1]));m=n+m;}else{if(x1>=ax[i-1]&&x1<=ax[i]){n=ay[i]*((x1-ax[i-1])/(ax[i]-ax[i-1]));m=n+m;}else{if(x1>ax[i]&&x1<=ax[i+1]){n=ay[i]*((x1-ax[i+1])/(ax[i]-ax[i+1]));m=m+n;}else{if(i==19&&x1>ax[19]&&x1<=ax[20]){n=ay[20]*((x1-ax[19])-(ax[20]-ax[19]));m=n+m;}}}}}x=x1*200+400;y=-m*200+500;dr.SetPixel(int(x),int(y),rgb);}}void CSHIYAN456View::OnHermite(){// TODO: Add your command handler code hereCClientDC dr(this);COLORREF rgb=RGB(0,255,255);int i;double x1=0,y1=0,x=0,y=0,m=0,n=0,tt=0,tt1=0,h=0,ax[100],ay[100],a[100];for(i=0;i<=10;i++){ax[i]=-1+((2/10.0)*i);ay[i]=1.0/(1+25*ax[i]*ax[i]);a[i]=(-50*ax[i])/((1+25*ax[i]*ax[i])*(1+25*ax[i]*ax[i]));}x1=-1;y1=1/(1+25*x1*x1);x=x1*200+400;y=-y1*200+500;dr.MoveTo(int(x),int(y));while(x1<=1){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]));tt=ay[0]*n;h=(x1-ax[0])*((x1-ax[1])/(ax[0]-ax[1]))*((x1-ax[1])/(ax[0]-ax[1]));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]));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(i==9&&x1>ax[9]&&x1<=ax[10]){n=(1+2*((x1-ax[10])/(ax[9]-ax[10])))*((x1-ax[9])/(ax[10]-ax[9]))*((x1-ax[9])/(ax[10]-ax[9]));tt=ay[i]*n;h=(x1-ax[10])*((x1-ax[9])/(ax[10]-ax[9]))*((x1-ax[9])/(ax[10]-ax[9]));tt1=a[i]*h;m=tt+tt1+m;}}}}}x=x1*200+400;y=-m*200+500;dr.SetPixel(int(x),int(y),rgb);}}5、总结体会分段线性插值的方法克服了Lagrange插值法当节点不断加密时,构造的插值多项式的次数不断升高,高次多项式虽然是连续的,但是不一定都收敛到相应的被插函数而产生Runge现象。

ch2-3分段线性插值

ch2-3分段线性插值
而当插值点x接近数据表尾时,则采用向后插值公式。
插值法
第三节 分段线性插值法
分段线性插值法的一般理论 分段线性插值多项式的构造 分段线性插值余项和误差估计
简单的分段高次插值多项式
分段线性插值法
一般来说,高次插值多项式是不妥当的,从 数值计算上可解释为高次插值多项式的计算会带 来舍入误差的增大,从而引起计算失真。因此, 实践上作插值时一般只用一次、二次最多用三次 插值多项式。 那么如何提高插值精度呢? 采用分段插值是一种办法。
h2 R( x ) f ( x ) ( x ) M, 8 其中h max ( xi 1 xi ), M max f ( x )
0 i n 1 a xb
分段线性插值多项式的构造
证明:由Lagrange 余项公式,当x∈[xi, xi+1]时
f ( )( x xi )( x xi 1 ) f ( x ) ( x ) R( x ) 2!
Newton向后插值公式为
t ( t 1) N 3 ( x 4 th) 0.64422 0.07958t 0.00563 2! t ( t 1)( t 2) 0.00083 3!
x x4 0.57891 0.7 t 1.2109 h 0.1
Newton向前插值公式为
等距节点插值公式
t ( t 1) N 3 ( x0 th) 0.38942 0.09001t 0.00480 2 t ( t 1)( t 2) 0.00083 6 x x0 t (0.57891 0.4) / 0.1 1.7891 h
sin 0.57891 N 3 (0.57891) 0.38942 0.09001 1.7891 1.7891 0.7891 0.00480 2 1.7891 0.7891 0.2109 0.00083 0.54711 6

计算方法分段线性_三次样条插值

计算方法分段线性_三次样条插值

计算方法分段线性_三次样条插值分段线性和三次样条插值是两种常用的插值方法,在数值分析和插值问题中广泛使用。

1.分段线性插值分段线性插值是一种简单直观的插值方法,将插值区间划分为若干个子区间,在每个子区间上用线性函数进行插值。

假设给定的插值节点有n+1 个,节点为 (x0, y0), (x1, y1), ..., (xn, yn),并且满足 x0 <x1 < ... < xn。

则对于任意 xx 使得 x 在 [xi, xi+1] 之间,可以通过线性插值得到其函数值 yy,即:yy = yi + (xx - xi) * (yi+1 - yi) / (xi+1 - xi)分段线性插值方法简单易懂,适用于一些较简单的插值问题。

但是由于插值函数在节点之间是线性的,可能不能准确地反映出数据的特征,因此不适用于一些需要高精度的插值问题。

三次样条插值是一种更复杂、更精确的插值方法,将插值区间划分为若干个子区间,在每个子区间上用三次多项式进行插值。

三次样条插值方法的基本思想是找到一组三次多项式,满足在每个子区间内插值点的函数值和一阶导数值相等,并且两个相邻多项式在节点处的二阶导数值也相等。

具体的求解步骤如下:(1) 假设有 n+1 个插值节点 (x0, y0), (x1, y1), ..., (xn, yn),构造 n 个三次多项式,即每个多项式在 [xi, xi+1] 之间插值。

(2) 对每个子区间内的多项式进行插值,设第 i 个子区间的多项式为 Si(x) = ai + bi(x-xi) + ci(x-xi)^2 + di(x-xi)^3、将插值节点的函数值和一阶导数值代入多项式中,可以得到 n 个线性方程,利用这 n 个线性方程可以求解出 n 个子区间的系数。

(3)由于n个子区间的多项式必须在节点处一阶导数值相等,因此再设立n-1个方程,利用这些方程可以求解出n-1个子区间的二阶导数值。

(4)将求解得到的系数和二阶导数值代入每个子区间的多项式中,得到完整的三次样条插值函数。

分段线性插值

分段线性插值

问题的背景在代数插值中,为了提高插值多项是对函数的逼近程度常常增加节点的个数,即提高多项式的次数,但这样做往往不能达到预想的效果。

例如:函数如果在区间[-5,5]上取11个等距节点:x k=-5+k (k=0,1,2,...,10),由lagrange插值公式可得到f(x)的10次L10(x)。

如图所示:L(x)仅在10区间的中部能较好的逼近函数f(x),位差异较大,而且越接近端点,逼近效果越差。

可以证明,当节点无限加密时,L(x)也只n能在很小的范围内收敛,这一现象称为Runge现象。

它表明通过增加节点来提高逼近程度是不适宜的,因而不采用高次多项式插值。

1. 分段线性插值问题的提出问题给定区间[a,b], 将其分割成a=x0 <x1<…<x n =b,已知函数y= f(x)在这些插值结点的函数值为y k =f(x k)(k=0,1,…,n)求一个分段函数I h(x),使其满足:(1) I h(x k )=y k,(k=0,1,…,n) ;(2) 在每个区间[x k ,x k+1 ]上,I h (x)是个一次函数。

易知,I h(x)是个折线函数, 在每个区间[x k ,x k+1 ]上,(k=0,1,…,n)于是, I h (x)在[a,b]上是连续的,但其一阶导数是不连续的。

一、分段线性函数的基函数我们从整体上来构造分段线性函数的基函数。

每个插值结点上所对应的插值基函数l i(x)应当满足:(1)l i(x)是分段线性函数;对于i=0,其它点上,l0(x)=0;对于i=1,2,…,n-1,其它点上,l i(x)=0;对于i=n,其它点上,ln(x)=0.于是,此表达式与前面的表达式是相同的,这是因为在区间[xk ,xk+1]上,只有lk (x),lk+1(x)是非零的,其它基函数均为零。

即I h (x)= yklk(x) + yk+1lk+1(x).例已知函数在区间[0,5]上取等距插值节点(如下表),求区间上分段线性插值函数,并利用它求出f(4.5)近似值。

1-3分段线性插值解析

1-3分段线性插值解析

1 x 0.8
分段线性插值多项式的构造 所以f(-0.96) (-0.96)=0.04253 (2)插值节点为xi=-1+ ih (i=0,1,…,n),h=(b-a)/2=2/n
由分段线性插值的余项估计: |f(x)- (x) |=|R(x)| ≤Mh2/8
f ( x ) 50 x (1 25 x 2 ) 2
内容小结
内容小结
1. 分段线性插值法;
2. 分段线性插值多项式的构造.
命令格式
1. 插值多项式 命令InterpolatingPolynomial求一个多项式,使给定的数 据是准确的函数值,其调用格式如下: InterpolatingPolynomial[{f1,f2,…},x] 2,3,…时的函数值为f1,f2,…。 当自变量x为1,
75 x 2 1 | f ( x ) | 50 | | 1 2 3 (1 25 x ) M max f ( x ) R( x ) 0.125h2 10 4
段线性插值多项式的构造
分段二次插值即:选取跟节点 x最近的三个节点 xi-1,xi, xi+1 进行二次插值 , 即在区间 [xi-1, xi+1] , 取:
h2 R( x ) f ( x ) ( x ) M, 8 其中h max ( xi 1 xi ), M max f ( x )
0 i n 1 a xb
分段线性插值多项式的构造
证明:由Lagrange 余项公式,当x∈[xi, xi+1]时
f ( )( x xi )( x xi 1 ) f ( x ) ( x ) R( x ) 2!
x x , x i 1 x x i i 1 i x xi 1 li ( x ) , x i x x i 1 xi xi 1 0 其它

分段线性插值法

分段线性插值法

例2. 给出数据表如下:
Xi yi 19.1 76.3 25 77.8 30.1 79.25 36 80.8 40 82.35 15.1 83.9 50 85.1
生成插值函数及其图形,并求当x = 27.1时的函数值。
解:In[1]:= data={{19.1,76.3},{25,77.8},{30.1,79.25},{36,80.8},{ 40,82.35},{45.1,83.9},{50,85.1}};
采用分段插值是一种办法。
一、分段线性插值的概念
所谓分段线性插值就是通过插值点用折线连 接起来逼近 f ( x )
设已知节点a x0 x1 xn b 上的函数值为: y0 , y1 yn 构造插值函数 ( x) 使其满足: (1) ( xi ) yi (i 0,1,2,..., n)
g1=ListPlot[Table[A],Prolog->AbsolutePointSize[18]];
Interpolation[A,InterpolationOrder->3] g2=Plot[%[x],{x,0,0.8}] Show[g1,g2] N[%%%[0.12],20] N[%%%%[0.72],20] N[f[0.12],20] N[f[0.72],20]
i 1 ( x x ) i j f ( x ) L2 ( x ) yk j i 1 ( x k x i ) k i 1 jk
i 1
这种分段的低次插值叫分段二次插值,在几何 上就是用分段抛物线代替 y=f(x) , 故分段二次 插值又为分段抛物插值。
2. 插值函数
函数InterPolation通过在数据点之间进行多项式 插值,构造一个近似函数(分段插值函数) , 该函数通过已知的数据点,其调用格式如下:

分段线性插值

分段线性插值

考察函数
f
(x)
1 1 x2
,
5 x5
右图给出了 P5 (x) 和 P10 (x) 的图像,当n 增大时, Pn (x) 在两端 会发出激烈的振荡
,这就是所谓龙格现
象。该现象表明,在
大范围内使用高次
插值,逼近的效果往
往是不理想的
-5
y f(x)
P5(x) 0
P10(x) 5x
另外,从舍入误差来看,高次插值误差的传播 也较为严重,在一个节点上产生的舍入误差会在计 算中不断扩大,并传播到其它节点上。因此,次数 太高的高次插值多项式并不实用,因为节点数增加 时,计算量增大了,但插值函数的精度并未提高。 为克服在区间上进行高次插值所造成的龙格现象, 采用分段插值的方法,将插值区间分成若干个小的 区间,在每个小区间进行线性插值,然后相互连接 ,用连接相邻节点的折线逼近被插函数,这种把插 值区间分段的方法就是分段线性插值法。
f
(xk
)
x xk xk1
f (xk1 )
( xk x xk1 )
在几何上就是用折线
y
y=f(x)
替代曲线,如右图所示
若用插值基函数表示,
则在a,b上
0
x0
x1
x2
xn x
n
S(x) li (x) f (xi ) ( a x b)
i0
其中
x
xi
xi1 xi1
,
xi1 x xi
上有误差估计式
f (x) S(x) hi2 max f (x) 8 xi x xi1
其中 hi xi1 xi
例5.19 已知f(x)在四个节点上的函数值如下表所示
x i 30 45 60 90

分段线性插值

分段线性插值

1.4分段插值 一.分段线性插值即用折线代替曲线。

设f (x )连续 优点:计算简单,适用于光滑性要求不高的插值问题。

缺点:分段插值函数只能保证连续性,失去了原函数的光滑性。

二.分段三次(Hermite )插值不少实际插值问题不仅要求函数值相等,而且还要求导数值也相等。

这就导致下面的Hermite 插值。

并满足: 从而由此条件可得: 类似可得的表达式。

下面是matlab 函数pieceline (x ,y ,u )实现分段线性插值多项式的计算。

function v=pline(x,y,u) delta=diff(y)./diff(x); n=length(x); k=ones(size(u)); for j=2:n-1k(x(j)<=u)=j; ends=u-x(k);v=y(k)+s.*delta(k);在每个区间 上,用1阶多项式 (直线) 逼近 f (x):],[1+i i x x 11111)()(++++--+--=≈i ii ii i i i y x x x x y x x x x x P x f ],[for 1+∈i i x x x 记 易证:当 ||max 1i i x x h -=+0→h )()(1x f x P h →一致给定000,...,;,...,;,...,,n n n x x y y y y ''在 上利用两端点的 y 及 y' 构造3次Hermite 函数。

],[1+i i x x 31111()()()()()i i i i i i i i S x y x y x y x y x ααββ++++=+++''3311'331 1.(), (),(), ()i i i i i i i i S x y S x y S x y S x y ++++===='''1111111111111()1, ()0, ()0, ()0,()0, ()1, ()0, ()0,()0, ()0, ()1, ()0,()0, ()i i i i i i i i i i i i i i i i i i i i i i i i i i i i x x x x x x x x x x x x x x ααββααββααββαα+++++++++++++==============''''''1110, ()0, () 1.i i i i x x ββ+++==''1111122()12,2()().i i i i i i i i i i ii x x x x x x x x x x x x x x x x αβ+++++--⎛⎫⎛⎫=+ ⎪ ⎪--⎝⎭⎝⎭-⎛⎫=- ⎪-⎝⎭程序中,pline是分段线性插值函数;输入参数x——给定的数据点的横坐标所组成的向量Y——给定的数据点的纵坐标所组成的向量U——需要计算的点所组成的向量输出参数v——u所对应的分段线性插值多项式的值,即v(i)=s1(u(i)),其中s1是未来满足分段线性插值多项式Detla是计算差商的最后计算s、v。

常见的插值方法及其原理

常见的插值方法及其原理

常见的插值方法及其原理插值是指在已知数据点的情况下,根据其中一种规则或算法,在这些数据点之间进行预测或估计。

常见的插值方法有:拉格朗日插值、牛顿插值、分段线性插值、样条插值和Kriging插值等。

1.拉格朗日插值方法:拉格朗日插值是一种基于多项式的插值方法。

它假设已知数据点的函数曲线可以由一个多项式来表示。

拉格朗日插值的原理是,通过确定多项式的系数,使多项式在已知数据点上满足给定的函数值。

具体地说,对于给定的一组已知数据点和对应的函数值,拉格朗日插值方法通过构造一个多项式,使得该多项式在每个数据点上的函数值等于给定的函数值。

然后,通过该多项式在插值点上的函数值来估计未知数据点的函数值。

2.牛顿插值方法:牛顿插值也是一种基于多项式的插值方法,其原理类似于拉格朗日插值。

它也是通过确定多项式的系数,使多项式在已知数据点上满足给定的函数值。

不同的是,牛顿插值使用了差商的概念,将插值多项式表示为一个累次求和的形式。

具体地说,对于给定的一组已知数据点和对应的函数值,牛顿插值方法通过差商的计算,得到一个多项式表达式。

然后,通过该多项式在插值点上的函数值来估计未知数据点的函数值。

3.分段线性插值方法:分段线性插值是一种简单而常用的插值方法。

它假设在两个相邻已知数据点之间的曲线是一条直线。

分段线性插值的原理是,通过连接相邻数据点之间的线段,构造一个连续的曲线。

具体地说,对于给定的一组已知数据点和对应的函数值,分段线性插值方法将曲线划分为若干小段,每一小段都是一条直线。

然后,在每个数据点之间的区域上,通过线性插值来估计未知数据点的函数值。

4.样条插值方法:样条插值是一种基于插值条件和光滑条件的插值方法。

它假设在两个相邻已知数据点之间的曲线是一个低次数的多项式。

样条插值的原理是,通过确定各个数据点之间的插值多项式系数,使得整个曲线在插值点上的各阶导数连续。

具体地说,对于给定的一组已知数据点和对应的函数值,样条插值方法将曲线划分为若干小段,每一小段都是一个低次数的多项式。

数值分析常用的插值方法

数值分析常用的插值方法

数值分析常用的插值方法数值分析中常用的插值方法有线性插值、拉格朗日插值、分段线性插值、Newton插值、Hermite插值、样条插值等。

下面将对这些插值方法进行详细介绍。

一、线性插值(linear interpolation)线性插值是最简单的插值方法之一、假设已知函数在两个点上的函数值,通过这两个点之间的直线来估计中间点的函数值。

线性插值公式为:f(x)=f(x0)+(x-x0)*(f(x1)-f(x0))/(x1-x0)其中,f(x)表示要求的插值点的函数值,f(x0)和f(x1)是已知的两个点上的函数值,x0和x1是已知的两个点的横坐标。

二、拉格朗日插值(Lagrange interpolation)拉格朗日插值是一种基于多项式的插值方法。

它通过多个已知点的函数值构造一个多项式,并利用这个多项式来估计其他点的函数值。

拉格朗日插值多项式的一般形式为:f(x) = Σ[f(xi) * Li(x)] (i=0,1,2,...,n)其中,f(x)表示要求的插值点的函数值,f(xi)是已知的多个点的函数值,Li(x)是拉格朗日基函数。

拉格朗日基函数的表达式为:Li(x) = Π[(x-xj)/(xi-xj)] (i≠j,i,j=0,1,2,...,n)三、分段线性插值(piecewise linear interpolation)分段线性插值是一种逐段线性近似函数的方法。

通过将整个插值区间分成多个小段,在每个小段上使用线性插值来估计函数的值。

分段线性插值的过程分为两步:首先确定要插值的点所在的小段,在小段上进行线性插值来估计函数值。

四、Newton插值(Newton interpolation)Newton插值也是一种基于多项式的插值方法。

利用差商的概念来构造插值多项式。

Newton插值多项式的一般形式为:f(x)=f(x0)+(x-x0)*f[x0,x1]+(x-x0)*(x-x1)*f[x0,x1,x2]+...其中,f(x)表示要求的插值点的函数值,f(x0)是已知的一个点的函数值,f[xi,xi+1,...,xi+k]是k阶差商。

计算方法1.3分段线性插值

计算方法1.3分段线性插值
计算方法1.3分段线 性插值
目录
• 引言 • 分段线性插值的基本原理 • 分段线性插值的构造方法
目录
• 分段线性插值的应用举例 • 分段线性插值的优缺点及改进方法 • 总结与展望
01
引言
目的和背景
数值计算中,插值是一种通过已知数 据点来估算未知数据点的方法。
分段线性插值作为一种常用的插值方 法,具有计算简单、易于实现等优点, 在实际问题中得到了广泛应用。
在许多实际问题中,函数关系往往是未知的 ,或者虽然知道函数关系但难以用解析式表 达,此时可以通过插值法来近似地表示函数 关系。
插值的概念和分类
插值的概念
在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数 据点。
插值的分类
根据插值函数的形式和构造方法的不同,插值可分为多项式插值、分段插值、 样条插值、三角插值等。其中,分段线性插值是一种简单而常用的插值方法。
每个子区间上的插值函数只与该 区间上的节点有关,因此局部数 据的改变不会影响整个插值函数。
易于实现
分段线性插值的算法相对简单, 易于编程实现,且对计算机资源 要求不高。
分段线性插值的缺点
插值精度有限
由于分段线性插值在每个子区间上都是线性的,因此对于非线性程 度较高的函数,插值精度可能较低。
不光滑
在节点处,分段线性插值函数的一阶导数可能不连续,导致插值曲 线不够光滑。
科学计算与仿真
在科学计算和仿真领域,高维分段线性插值可以作为数值 计算的基本工具之一,用于求解高维偏微分方程和其他复 杂数学问题。
05
分段线性插值的优缺点及 改进方法
分段线性插值的优点
计算简单
分段线性插值相比于其他插值方 法,如多项式插值或样条插值, 计算更为简单,不涉及复杂的数 学运算。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数值分析》课程设计题目分段线性插值学生牛彦坡陈彬冯梦雨指导教师郭阁阳天津工程师范学院课程设计任务书理学院数学0702 班学生牛彦坡陈彬冯梦雨课程设计课题:考察分段线性插值一、课程设计工作日自 2009 年 6 月 22 日至 2009 年 6 月 28 日二、同组学生:牛彦坡陈彬冯梦雨三、课程设计任务要求(包括课题来源、类型、目的和意义、基本要求、参考资料等):✧来源与意义:本课题来源于教材第二章插值法,目的是从几何意义掌握分段线性插值的思想,加深对其的理解以及掌握用计算机与Matlab解决相关问题的能力。

✧基本要求:要求自编程序;掌握编程思想,学会一门编程语言;报告要有较强的理论分析;有较强说服力的数据表或图像;对结果进行分析;给出相应结论;鼓励创新;✧参考资料:1.数值分析,李庆扬,王能超,易大义,2001,清华大学出版社(第四版)。

2.数值方法,关治,陆金甫,2006,清华大学出版社。

3.数值分析与实验学习指导,蔡大用,2001,清华大学出版社。

4.数值分析与实验,薛毅,2005,北京工业大学出版社。

指导教师签字:教研室主任签字:天津工程师范学院课程设计评审表一、 问题提出:考察分段线性插值: 对21()1f x x=+在(-5,5)上进行分段线性插值,取不同节点个数n ,得到不同分段线性插值函数。

(要求:自编程序,报告有数据表、图像、分析、结论。

) 虽然matlab 里有直接分段线形插值的函数,但为了对分段插值算法有更明确的理解,编写该程序是有必要的 需要解决的问题:1、由已知数据节点编写分段线形插值函数,从而能由所编函数得到非节点的函数值。

2、比较用不同节点数所得插值函数与真实函数的误差,从而得出节点数与插值效果的关系二、理论基础所谓分段线性插值就是通过插值点用折线段连接起来逼近f (x )。

设已知节点a=x 0<x 1<…<x n =b 上的函数值f 0,f 1,…,f n ,求一折线函数满足:1o ],,[)(b a C x I h ∈2o k h f x I =)( ),,1,0(n k =,3o )(x I h 在每个小区间[x k ,x k+1]上是线性函数。

则称)(x I h 为分段线性插值函数。

模型一:由定义可知)(x I h 在每个小区间[x k ,x k+1]上可表示为)(x I h =1111++++--+--k kk kk k k k f x x x x f x x x x )(1+≤≤k k x x x模型二:首先确定间隔序列k ,使得:第二个量是局部变量s ,其定义为 : 最后一个量是一阶均差则插值基函数可表示为kk kk k k x x y y x x y x L ---+=++11)()(k k s y δ+=.三、实验内容1、模型一: 用MATLAB 分别建立m 文件:(1)原函数fd1.m(2)分段线性插值函数fd2.m(3)比较不同节点数所得分段线性插值函数的插值效果fd3.m2、选取插值节点数为偶数在MATLAB 窗口中执行:fd3 n=2的数据见附录,图像如下:-5-4-3-2-1012345xy原函数(实线)-插值函数(虚线)-5-4-3-2-1012345-1-0.5xR (x )误差分析n=8的图如下: n=20的图3、模型二:用MATLAB 分别建立m 文件:(1)分段插值函数fd22(2)插值效果比较函数fd32(选取插值节点数为奇数)程序代码(参见附录)在MATLAB窗口中执行:fd32得下图:上图为不同节点数插值函数图像与原函数图像,下图为误差图像3、由上所有的图可看出,由于原函数是偶函数,等距节点所得插值函数有很强对称性,下任取节点,编写程序fd33.m,得图上图为不同节点数插值函数图像与原函数图像,下图为误差图像4、比较不同节点所得插值函数与被插函数误差的平方和,程序模板为d1.m得下图:红星由fd32得奇数节点误差平方和,绿星加圈由fd3得偶数节点误差平方和,圈由f33得随机节点误差平方和,数据见附录四、结果分析1、不同插值节点数所得的分段线形插值函数,在节点处与原函数的函数值一定相同2、所得的分段线形插值函数在原函数斜率绝对值变化大的地方,与原函数的误差比较大3、由误差平方和e,插值节点个数越多,e有减小的趋势,最后趋于0。

单考虑奇数或偶数个节点,则随节点数增加e严格减小。

4、随机生成的节点不如等距节点使插值效果好。

五、结论插值节点个数越多,分段线形插值函数与原函数误差平方和有减小趋势,插值效果越好。

六、参考文献《数值分析与实验》薛毅编著北京工业大学出版社附录代码如下:% fd1.m线性插值原函数function y=fd1(x)y=1./(1+x.^2);% fd2.m 分段线性插值函数function yi=fd2(x,y,xi)n=length(x);m=length(y);if n~=merror('X和Y向量的长度必须相同');return;endfor k=1:n-1if abs(x(k)-x(k+1))<eps % x(k)-x(k+1) 的绝对值必须大于e error('数据有误');return;endif x(k)<=xi&xi<=x(k+1) % 保证 x(k) < xi < x(k+1)temp=x(k)-x(k+1);yi=(xi-x(k+1))/temp*y(k)+(xi-x(k))/(-temp)*y(k+1)return;endend% fd3.m 比较插值效果a=-5;b=5;n=input('请输入分端节点数:');if n<=0error('你输入的数据有误!!!');break;endh=(b-a)/(n-1); % 求节点x=a:h:b;y=fd1(x);xx=a:0.1:b; % 用分段线性插值函数求非节点函数值yyi=fd1(xx);m1=length(xx);z=zeros(1,m1);for k1=1:m1z(k1)=fd2(x,y,xx(k1));endw=z-yyi; % 计算误差subplot(2,1,1);plot(x,y,'o',xx,yyi,'-',x,y,'k:');%插值图像xlabel('x');ylabel('y');title('原函数(实线)-插值函数(虚线)');hold onsubplot(2,1,2);plot(xx,w,'k:'); % 误差的图像xlabel('x');ylabel('R(x)');title('误差分析');hold onxx=xx';yyi=yyi';z=z';w=w';% fd22.m 分段线性插值函数function v=fd22(x,y,u)delta=diff(y)./diff(x);n=length(x);k=ones(size(u));for j=2:n-1k(x(j)<=u)=j;ends=u-x(k);v=y(k)+s.*delta(k);% fd32.m同时画不同节点的插值函数图像和误差图像clearcloset=[-5:0.01:5];a=['k''g''r''c''m'];for i=1:5n=2*i+1;x=linspace(-5,5,n); %把区间[-5 5]分为(n-1)份,算插值节点y=fd1(x);p=fd22(x,y,t);p=p'; %计算以(x,y)为插值点的插值函数在t处的各个值y1=fd1(t);y1=y1';e=p-y1; %计算误差subplot(2,1,1);plot(x,y,a(i));hold on; %画出插值函数图像及误差图像subplot(2,1,2);plot(t,e,a(i));hold on;endsubplot(2,1,1);legend('n=3','n=5','n=7','n=9','n=11')subplot(2,1,2);legend('n=3','n=5','n=7','n=9','n=11')subplot(2,1,1);fplot(@fd1,[-5 5],'k'); %画出原函数图像hold off%fd33.m 插值节点非等分区间获得closet=[-5:0.01:5];a=['k''g''r''c''m'];for i=1:5n=2*i+1;x=[-5 rand(1,n-2)*10-5 5]; %得(-5,5)上的n维随机向量x=sort(x);y=fd1(x);p=fd22(x,y,t);p=p';y1=fd1(t);y1=y1';e=p-y1;subplot(2,1,1);plot(x,y,a(i));hold on;subplot(2,1,2);plot(t,e,a(i));hold on;endsubplot(2,1,1);legend('n=3','n=5','n=7','n=9','n=11')subplot(2,1,2);legend('n=3','n=5','n=7','n=9','n=11')subplot(2,1,1);fplot(@fd1,[-5 5],'k');hold off%fd1.m 比较不同节点数误差平方和cleart=[-5:0.01:5];a=[];b=[];for i=1:10n=2*i; %n=2*i+1则是奇数节点x=linspace(-5,5,n)y=fd1(x);p=fd22(x,y,t);y1=fd1(t);e=p-y1;e=e*e';a=[a e];b=[b n];endplot(b,a,'go')xlabel('n节点数')ylabel('e误差平方和') hold onn=2n234567误差平方和136.920979.168963.334 6.977523.73840.8329 n891011121314文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.误差平方和9.00150.5726 3.61520.572 1.56760.46480.7472 n15161718192021误差平方和0.33660.39450.23270.22910.15930.14380.1101- 10 -文档来源为:从网络收集整理.word版本可编辑.。

相关文档
最新文档