分段线性插值法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分段线性插值法
————————————————————————————————作者: ————————————————————————————————日期:
《数值分析》实验报告
实验序号:实验五 实验名称: 分段线性插值法
1、 实验目的:
随着插值节点的增加,插值多项式的插值多项式的次数也增加,而对于高次的插值容易带来剧烈的震荡,带来数值的不稳定(Rung e现象)。为了既要增加插值的节点,减小插值的区间,以便更好的逼近插值函数,又要不增加插值多项式的次数以减少误差,可采用分段线性插值。
2、 实验内容:
求一个函数ϕ(x )用来近似函数f (x),用分段线性插值的方法来求解近似函数ϕ(x )并画出近似函数图像及原函数图像。
设在区间[a,b]上,给定n +1个插值节点b x x x x a n =<<<<=...210和相应的函数值n y y y ,...,,10,求一个插值函数)(x ϕ,满足以下条件:
(1)
),...,2,1,0()(n j y x j j ==ϕ; (2) )(x ϕ在每一个小区间[1,+j j x x ]上是线性函数。 对于给定函数11-,2511)(2≤≤+=
x x x f 。在区间[]11-,上画出f (x )和分段线性插值函数)(x ϕ的函数图像。
1. 分段线性插值的算法思想:
分段线性插值需要在每个插值节点上构造分段线性插值基函数)(x l j ,
然后再作它们的线性组合。分段线性插值基函数的特点是在对应的插值节
点上函数值取 1,其它节点上函数值取0。插值基函数如下:
⎪⎩⎪⎨⎧≤≤--=其它 ,0,)(101010x x x x x x x x l ⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧≤<--≤≤--=+++---其它 ,0,,)(11
1111j j j j j j j j j j j x x x x x x x x x x x x x x x l
⎪⎩
⎪⎨⎧≤≤--=---其它 ,0,)(111n n n n n n x x x x x x x x l 设在节点a≤x0<x1<…≤b=f(xi),(i=0,1,2,…,n)求折线函数L(x)满足:
(1) L (x )∈C [a,b]
(2) L(x[i]=y[i])
(3) L(x )在每个小区间(x[i],x[i+1])上是线性
插值函数¢(x )叫做区间[a ,b]上对数据(x[j],y[j ])(j=0,1,2,…,n)的分段区间函数。 利用一介拉格朗日函数,直接得到线性插值函数为:
L(x0)=(x-x[1])/x [0]-x [1];(x [0]≤x ≤x[1])
L(x 0)=0(x[1]≤x ≤x[n])
分段线性方程的表达式:
¢(x )=∑(j=0,..,n)y[j]*L [j](x);
3、实验代码:
// LDlg .c pp : im plement ation
#include "st daf x.h"
#include "L.h"
#in clud e "LDlg .h"
#if de f _DE BU G
#define new DEB UG _NE W
#undef TH IS _ ch ar T HIS _FILE [] = __FI LE__;
#en dif
/////////////////////////////////////////////////////////////////////////////
// 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/D DV 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)
ﻩﻩ// Nomessage handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLDlg dialog
CLDlg::CLDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLDlg::IDD,pParent)
{
//{{AFX_DATA_INIT(CLDlg)
ﻩ// NOTE: the ClassWizard willadd member initialization here
//}}AFX_DATA_INIT
ﻩ//Note that LoadIcon does not require a subsequentDestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}