三次埃尔米特插值
- 格式:doc
- 大小:425.50 KB
- 文档页数:18
《计算方法》课程设计报告学生姓名:张学阳学号:1009300132陈洋1009300109刘睿1009300122 学院:理学院班级: 数学101题目: 分段线性及三次埃尔米特插值通用程序指导教师:宋云飞职称:讲师朱秀丽讲师尚宝欣讲师2012年12月30日目录目录 (I)一、摘要 (1)二、算法设计 (1)2.1分段线性插值 (1)2.2分段三次埃尔米特插值 (1)2.3功能框图 (1)三、例题计算 (1)四、误差及结果分析 (9)4.1例题误差分析 (1)4.2结点个数对插值结果的影响 (1)五、总结及心得体会 (12)参考文献 (13)源程序 (14)一、摘要分段线性插值与分段定义的线性插值,在相邻插值节点的区间上对应的是同一个线性函数。
由于它们的表现形式不一样从而产生为两种不同的计算方法,相应的误差表现形式也不一样.拉格朗日插值余项利用f(x)的二阶导数,要f(x)的二阶导数存在,对于二阶导数不存在的情况不能估算出它的误差,所以适用范围比较小.现在我们可以利用一阶导数就估算出误差,给计算带来许多的方便。
为了避免高次插值可能出现的大幅度波动现象,在实际应用中通常采用分段低次插值来提高近似程度,比如可用分段线性插值或分段三次埃尔米特插值来逼近已知函数,但它们的总体光滑性较差。
为了克服这一缺点,一种全局化的分段插值方法——三次样条插值成为比较理想的工具。
在代数插值过程中,人们为了获得较好的近似效果,通常情况下是增加插值节点数.由于二次插值比线性插值近似效果好,因此容易错误地认为插值多项式次数越高越好.事实上,随着插值节点的增多,插值多项式不一定收敛到被插值函数.。
通过分段低次插值或样条插值可以得到较好的近似逼近函数,分段低次插值具有公式简单、运算量小、稳定性好、收敛性有保证等优点.随着子区间长度h取得足够小,分段低次插值总能满足所要求的精度.因此分段低次插值应用十分广泛.。
分段线性插值是分段低次插值中常见的方法之一,在本文中对函数在(-5,5)上进行分段线性插值,取不同节点个数n,得到不同分段线性插值函数.并用MATLAB编写分段线性插值函数,最后比较用不同节点数所得插值函数与真实函数的误差,从而得出节点数与插值效果的关系。
数值分析实验六(分段三次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 CT estV iew class//#include "stdafx.h"#include "test.h"#include "testDoc.h"#include "testView.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////// //////////// CTestV iewIMPLEMENT_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 commandsON_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/destructionCTestView::CTestV iew(){// TODO: add construction code here}CTestView::~CT estView(){}BOOL CTestView::PreCreateWindow(CREA TESTRUCT& cs){// TODO: Modify the Window class or styles here by modifying // the CREA TESTRUCT csreturn CV iew::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////// //////////// CTestV iew drawingvoid CTestView::OnDraw(CDC* pDC){CTestDoc* pDoc = GetDocument();ASSERT_V ALID(pDoc);// TODO: add draw code for native data hereint i,j,k;double x,y,p_x,p_y,l,xx[100],f[100],F[100],sum,p_sum;CPen MyPen,*OldPen;pDC->SetViewportOrg(400,400); //定义坐标原点for(i=-500;i<500;i++){pDC->SetPixel(0,i,RGB(0,0,0));pDC->SetPixel(i,0,RGB(0,0,0)); //画出坐标}pDC->TextOut(-210,5,"-1");pDC->TextOut(196,5,"1");//原函数MyPen.CreatePen(PS_SOLID,1,RGB(255,0,0));//定义画笔颜色OldPen=pDC->SelectObject(&MyPen);x=-1.0,y=1/(1+25*x*x);p_x=x*200;p_y=-y*200;pDC->MoveTo(p_x,p_y);for (x=-1.0;x<=1.0;x+=0.0001){y=1/(1+25*x*x);p_x=x*200;p_y=-y*200;pDC->LineT o(p_x,p_y);}pDC->SelectObject(OldPen);MyPen.DeleteObject();//分段三次Hermite插值MyPen.CreatePen(PS_SOLID,1,RGB(0,0,0)); OldPen=pDC->SelectObject(&MyPen); x=-1.0,y=1.0/(1+25*x*x);p_x=x*200;p_y=-y*200;pDC->MoveTo(p_x,p_y);x=-1.0;for(i=0;i<=10;i++){f[i]=1/(1+25*x*x);xx[i]=x;F[i]=-50*x/(1+25*x*x)/(1+25*x*x); //导数x+=0.2;}x=-1.0;for(j=0;j<=1000;j++){sum=0;for(i=0;i<=10;i++){if(x==xx[i]){sum=f[i];p_x=x*200,p_y=-sum*200;pDC->LineT o(p_x,p_y);break;}if(xxx[i]){y=(1+2*(x-xx[i])/(xx[i+1]-xx[i]))*(x-xx[i+1])*(x-xx[i+1])/(xx[i]-xx[i+1])/(xx[i]-xx[i+1]);sum+=f[i]*y;y=(1+2*(x-xx[i+1])/(xx[i]-xx[i+1]))*(x-xx[i])*(x-xx[i])/(xx[i+1]-xx[i])/(xx[i+1]-xx[i]);sum+=f[i+1]*y;y=(x-xx[i])*(x-xx[i+1])*(x-xx[i+1])/(xx[i]-xx[i+1])/(xx[i]-xx[i+1]);sum+=F[i]*y;y=(x-xx[i+1])*(x-xx[i])*(x-xx[i])/(xx[i+1]-xx[i])/(xx[i+1]-xx[i]);sum+=F[i+1]*y;p_x=x*200;p_y=-sum*200;pDC->LineT o(p_x,p_y);break;}}x+=0.002;}pDC->SelectObject(OldPen);MyPen.DeleteObject();/////////////////////////////////////////////////////////////////// //////////// CTestV iew printingBOOL CTestView::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add extra initialization before printing}void CTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add cleanup after printing}/////////////////////////////////////////////////////////////////// //////////// CTestV iew diagnostics#ifdef _DEBUGvoid CTestView::AssertV alid() const{CView::AssertV alid();}void CTestView::Dump(CDumpContext& dc) const{CView::Dump(dc);CTestDoc* CT estV iew::GetDocument() // non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CT estD oc)));return (CT estDoc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////// //////////// CTestV iew message handlers三、运算结果截屏红色的曲线为原函数图像,黑色曲线为分段三次Hermite插值曲线四、算法分析上述图像中黑色的曲线为分段分段三次Hermite插值多项式所对应的图像,由图像可看出黑色的分段三次Hermited插值函数图像和拉格朗日、分段线性插值相比与红色被逼近函数的重合度最好,说明分段三次Hermite插值在函数的各节点两边插值函数的导数是相等的,保证了在各节点的平滑性,且不会出现Runge现象。
两点三次埃尔米特插值余项证明《两点三次埃尔米特插值余项证明》1. 概述在数值分析中,插值是一种常用的数值计算方法,用于在已知数据点之间估算未知数据点的值。
而埃尔米特插值则是一种特殊的插值方法,可以通过已知点的函数值以及导数值来构造插值多项式,进而进行函数值的估算。
2. 两点三次埃尔米特插值在插值问题中,特别是在微积分和数值分析中,两点三次埃尔米特插值是一种常见且重要的技术。
它通过两个数据点的函数值和导数值,构造出一个三次多项式,可以更加准确地近似原始函数,并且可以保持更高的导数连续性。
这种方法在实际问题中具有很强的适用性,尤其是在需要对曲线进行平滑插值的情况下。
3. 余项证明在使用插值方法进行数据估算时,余项是一个重要的概念。
它代表了插值多项式与原函数之间的差距,可以用来评估插值的准确性和可靠性。
对于两点三次埃尔米特插值而言,余项的证明是一项关键的工作,它可以帮助我们理解插值多项式的误差情况,进而指导我们对插值结果的使用和解释。
4. 个人观点和理解作为一种高级的数值计算方法,两点三次埃尔米特插值在实际问题中的应用非常广泛,尤其是在科学计算和工程领域。
通过对余项的详细证明和分析,我们可以更加深入地理解插值方法的原理和实际效果,进而更加灵活地应用这一技术解决实际问题。
5. 总结两点三次埃尔米特插值作为一种高级的插值方法,通过对已知点的函数值和导数值进行合理的处理,可以构造出一个更加精确的插值多项式,用于估算未知点的函数值。
在实际应用中,我们需要充分理解余项的证明和分析,以便更好地评估插值结果的准确性和可靠性。
通过以上文章内容的布局和深度处理,可以详细解释和讨论所提及的主题,从而全面了解和深入了解其背后的知识和原理。
6. 余项证明的数学推导在两点三次埃尔米特插值中,我们需要构造出一个三次多项式,以满足已知数据点的函数值和导数值。
设两个已知点为(x0, y0)和(x1, y1),以及它们各自的一阶导数值y'0和y'1。
毕业论文(设计)Hermite插值的若干问题研究Study of Hermite interpolation problems申请学位:学士院系:数学与信息科学学院专业:信息与计算科学专业姓名:学号:指导老师:[摘要]本文主要是具体讨论Hermite插值的若干问题,主要介绍了二重Hermite插值在具体应用中出现的实际问题,并通过几个例子说明建立Hermite 插值多项式的方法、两点三次Hermite插值及其余项、Hermite插值公式的相关问题。
并编程计算来比较几种方法。
通过推导和证明得知三次Hermite插值已经较高,再高可能发生Runge现象。
关键词: 二重Hermite插值多项式,唯一性定理,误差定理[Abstract]This paper is detailed to discuss some problems of the Hermite interpolation, mainly introduced the double Hermite interpolation in the specific application of practical problems, and through several examples establish Hermite interpolation polynomial method, two point three times of Hermite interpolation and its remainder term, Hermite interpolation formula of the related problems. And the program calculation to compare several methods. By derivation and proof that cubic Hermite interpolation has been high, high Runge phenomenon may occur againKeywords: Double Hermite interpolation polynomial, the uniqueness theorem, the theorem of the error目录1、Hermite插值概述1.1 Hermite插值定义 (1)1.2 Hermite插值公式的推导 (2)1.3 几个重要的定理 (4)2、两点三次插值及其余项2.1 两点三次插值 (3)2.2 两点三次插值的余项 (4)2.3 三次埃尔米特插值多项式 (6)2.4 二重Hermite插值多式 (7)3、重节点插商与Hermmite插值3.1 重节点插商 (10)4、例题及其解答 (12)5、参考文献 (17)6、附录 (18)7、谢辞 (20)1 Hermite 插值概述1.1 Hermite 插值的定义理论背景:许多实际插值问题中,为使插值函数能更好地和原来的函数重合,不但要求二者在节点上函数值相等,而且还要求相切,对应的导数值也相等,甚至要求高阶导数也相等。
《计算方法》课程设计报告学生姓名:张学阳学号:1009300132陈洋1009300109刘睿1009300122 学院:理学院班级: 数学101题目: 分段线性及三次埃尔米特插值通用程序指导教师:宋云飞职称:讲师朱秀丽讲师尚宝欣讲师2012年12月30日目录目录 (I)一、摘要 (1)二、算法设计 (1)2.1分段线性插值 (1)2.2分段三次埃尔米特插值 (1)2.3功能框图 (1)三、例题计算 (1)四、误差及结果分析 (9)4.1例题误差分析 (1)4.2结点个数对插值结果的影响 (1)五、总结及心得体会 (12)参考文献 (13)源程序 (14)一、摘要分段线性插值与分段定义的线性插值,在相邻插值节点的区间上对应的是同一个线性函数。
由于它们的表现形式不一样从而产生为两种不同的计算方法,相应的误差表现形式也不一样.拉格朗日插值余项利用f(x)的二阶导数,要f(x)的二阶导数存在,对于二阶导数不存在的情况不能估算出它的误差,所以适用范围比较小.现在我们可以利用一阶导数就估算出误差,给计算带来许多的方便。
为了避免高次插值可能出现的大幅度波动现象,在实际应用中通常采用分段低次插值来提高近似程度,比如可用分段线性插值或分段三次埃尔米特插值来逼近已知函数,但它们的总体光滑性较差。
为了克服这一缺点,一种全局化的分段插值方法——三次样条插值成为比较理想的工具。
在代数插值过程中,人们为了获得较好的近似效果,通常情况下是增加插值节点数.由于二次插值比线性插值近似效果好,因此容易错误地认为插值多项式次数越高越好.事实上,随着插值节点的增多,插值多项式不一定收敛到被插值函数.。
通过分段低次插值或样条插值可以得到较好的近似逼近函数,分段低次插值具有公式简单、运算量小、稳定性好、收敛性有保证等优点.随着子区间长度h取得足够小,分段低次插值总能满足所要求的精度.因此分段低次插值应用十分广泛.。
分段线性插值是分段低次插值中常见的方法之一,在本文中对函数在(-5,5)上进行分段线性插值,取不同节点个数n,得到不同分段线性插值函数.并用MATLAB编写分段线性插值函数,最后比较用不同节点数所得插值函数与真实函数的误差,从而得出节点数与插值效果的关系。
二、算法设计2.1 分段线性插值分段线性插值就是通过插值点用折线段连接起来的逼近函数)(x f 。
设已知节点b x x x a n =<<= 10上的函数值,,,,10n f f f 记,1k k k x x h -=+,max k h h =求一折线函数)(x I h 满足:(1)];,[)(b a C x I h ∈(2));,,1,0()(n k f x I k k h ==(3))(x I h 在每个小区间],[1+k k x x 上是线性函数. 则称)(x I h 为分段线性插值函数。
由定义可知)(x I h 在每个小区间],[1+k k x x 上可表示为.1,,1,0,,)(11111-=≤≤--+--=+++++n k x x x f x x x x f x x x x x I k k k kk kk k k k h分段线性插值的误差估计可利用插值余项公式)()()()(11112x l y x l y x l y x L k k k k k k ++--++=得到|))((|max 2|)()(|max 1211+≤≤≤≤--≤-+=k k x x x h x x x x x x x M x I x f k k kx k 或228|)()(|max h M x I x f h bx a ≤-≤≤ 其中.|)(''|max 2x f M bx a ≤≤=由此还可得到)()(lim 0x f x I h h =→在],[b a 上一致成立,故)(x I h 在],[b a 上一致收敛到)(x f 。
2.2 分段三次埃尔米特插值分段线性插值函数)(x I h 的导数是间断的,若在节点),,1,0(n k x k =上除已知函数值kf 外还给出导数值),,1,0('n k m f k k ==这样就可构造一个导数连续的分段插值函数),(x I h 它满足条件:(1)];,[')(b a C x I h ∈(2)),,1,0(')(',)(n k f x I f x I k k h k k h ===; (3))(x I h 在每个小区间],[1+k k x x 上是三次多项式。
根据两点三次插值多项式可知,)(x I h 在区间],[1+k k x x 上的表达式为111211211)21()()21()()(+++++++--+--+--+--=k k x k k k k k k k k x k k h f x x x x x x x x f x x x x x x x x x I')()(')()(1121211+++++---+---+k k kk k k k k k k f x x x x x x f x x x x x x上式对于1,,1,0-=n k 成立。
利用三次埃尔米特插值多项式的余项可得误差估计],[|,)(|max 3841|)()(|1)4(41+≤≤∈≤-+k k z x x k h x x x x f h x I x f k k 其中k k k x x h -=+12.3功能框图程序可以通过输入插值函数,插值结点个数,来实现插值,还可以选择插值方式,具体框图如下三、例题计算1.插值函数为1xf=x)(2+输入6个节点的分段线性插值输入6个节点的分段三次埃尔米特插值请输入插值函数:x^2+1请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 1 请输入插值节点数N=6是否继续(1为继续):1请输入插值函数:x^2请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 2 请输入插值节点数N=6是否继续(1为继续):22.插值函数为)fx(xcos()输入节点为8的分段线性插值输入节点为8的分段三次埃尔米特插值请输入插值函数:cos(x)请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 1 请输入插值节点数N=8是否继续(1为继续):1请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 2 请输入插值节点数N=83.插值函数为x e(x)f输入节点为10的分段线性插值输入节点为10的分段线三次埃尔米特插值请输入插值函数:exp(x)请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 1 请输入插值节点数N=10是否继续(1为继续):1请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 2 请输入插值节点数N=10四、误差及结果分析4.1例题误差分析1. 1)(2+=x x f 误差n 值取8,由分段线性插值余项公式|))((|max 2|)()(|max 1211+≤≤≤≤--≤-+=k k x x x h x x x x x x x M x I x f k k kx k 可得误差限为25.18102)(''max =⨯x f 由插值图像和误差可知误差结果较大由分段三次埃尔米特插值余项公式],[|,)(|max 3841|)()(|1)4(41+≤≤∈≤-+k k z x x k h x x x x f h x I x f k k 可得误差限为00)(384141=⨯-+k k x x 误差为零因此分段三次埃尔米特插值较为精确2. )cos()(x x f =误差n 值取10,分段线性插值误差限为2110102)(''max =⨯x f 分段三次埃尔米特插值误差限为38411)(384141=⨯-+k k x x 由误差结果可知分段三次埃尔米特插值得到的结果更为精确3. x e x f =)(误差n 值取12,分段线性插值误差限为61.838812512102)(''max 5==⨯e x f 分段三次埃尔米特插值误差限为0.1864)65(3841)(384154541=⨯⨯=⨯-+e e x x k k 由误差结果可知分段三次埃尔米特插值得到的结果更为精确综上可知,同等条件下分段三次埃尔米特插值得到的结果更为精确4.2结点个数对插值结果的影响为了进一步研究误差与插值节点的关系,我们以例题3的分段三次埃尔米特插值为例n 值取4时,误差为15.0974,插值图像如下n值取5时,误差为6.1839,插值图像如下n值取6时,误差为2.9822,插值图像如下n值取8时,误差为0.9436,插值图像如下通过误差限和得到的图像可知,插值节点越多,得到的图像越精确。
五、总结及心得体会刚看到题目时,心里一片茫然不知该如何下手,因为计算方法的课程设计和之前做的课程设计有很大的不同,特别是不知论文该写哪些东西,后来通过查阅书籍和网络搜索同类论文了解了它的写作内容。
总是有很多的问题存在,只是大多时候都隐藏了起来,当我们发现问题时,应该以平常的心态去对待,着急是没有用的,我们要做的就是在最短的时间内找出解决的办法。
在学习计算方法课程的时候,发现它确实不好学,只是应付考试就尚且有些费劲,要想真正弄精就更是困难了,不过这也是没有办法的事,毕竟就是有很多东西很难理解甚至是理解不了的,要想比别人更厉害,就得花些时间在难以理解的问题上。
在做课设时有些同学做了界面现一想还急火攻心,开始自己也想着做一下界面,可是有难度,不得不佩服那些能人,既然那东西不会,就只能乖乖用自己会的了。
有时候我不得不再次钦佩自己的团队协作能力,同样又是和不同的人组队,依旧是碰撞出激情的火花,我只想说团结就是力量。
我们最大的敌人是我们自己,我一直深信,在做的过程中,脑海中一直在想别人做的怎么样了,是不是比自己做的更好,当静下心来时,才恢复过来,管别人干什么,尽自己最大的努力把东西最好不就可以了吗,相信自己一定能做好。
有一个伟人曾说过如果给他一把斧头用六个小时去砍柴,他会用四个钟头取磨这把斧头,课设前的准备是很重要的,还好,通过学习计算方法了解了许多计算方法的知识。
我们学习的知识有很多是模糊的,当在规定的时间去完成任务是,我们所要做的就是把可能用到的知识拾起来或是尽快学会一种方法来解决它,这是一种能力,是需要我们通过锻炼去提高的。
参考文献[1]李庆扬,王能超,易大义.数值分析(第5版).北京:清华大学出版社,2008.[2]李庆扬,关治,白峰杉.数值计算原理.北京:清华大学出版社,2000.[3]李海,邓樱.MATLAB程序设计教程.北京:高等教育出版社,2002.[4]张学敏,倪虹霞. MATLAB基础及应用. 中国电力出版社,2009.[5]易大义, 沈云宝, 李有法. 计算方法[M]. 浙江大学出版社, 2002.源程序c=1;while(c==1)syms f x lx;f=input('请输入插值函数');B=input('请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):'); if B==1N=input('请输入插值节点数N=');xx=-5:10/N:5;ff=zeros(1,length(xx));for i=1:(N+1)x=xx(i);ff(i)=eval(f);endM = -5:0.01:5;output = zeros(1,length(M));n = 1;for i=2:N+1for x=-5:0.01:5if x<xx(i) && x>=xx(i-1)lx(1)=ff(i-1)*(x-xx(i))/(xx(i-1)-xx(i));lx(2)=ff(i)*(x-xx(i-1))/(xx(i)-xx(i-1));output(n) = lx(1)+lx(2);n = n+1;endendendezplot(f,[-5,5])hold onA =-5:0.01:5;plot(A,output,'r');endif B==2N=input('请输入插值节点数N=');f1=diff(f);xx=-5:10/N:5;ff=zeros(1,length(xx));for i=1:(N+1)x=xx(i);ff(i)=eval(f);ff1(i)=eval(f1);endM = -5:0.01:5;output = zeros(1,length(M));n = 1;for i=2:N+1for x=-5:0.01:5if x<xx(i) && x>=xx(i-1)lx(1)=ff(i-1)*(x-xx(i))^2/(xx(i-1)-xx(i))^2*(1+2*(x-xx(i-1))/(xx(i)-xx(i-1)));lx(2)=ff(i)*(x-xx(i-1))^2/(xx(i)-xx(i-1))^2*(1+2*(x-xx(i))/(xx(i-1)-xx(i)));lx(3)=ff1(i-1)*(x-xx(i))^2/(xx(i-1)-xx(i))^2*(x-xx(i-1));lx(4)=ff1(i)*(x-xx(i-1))^2/(xx(i)-xx(i-1))^2*(x-xx(i));output(n) = lx(1)+lx(2)+lx(3)+lx(4);n = n+1;endendendezplot(f,[-5,5])hold onA =-5:0.01:5;plot(A,output,'r');endif B~=1&&B~=2disp('输入有误,请重新输入')endc=input('是否继续(1为继续):');closeend注:设计报告撰写说明一、正文内容要求:正文内容层次序号为:1、1.1、1.1.1……。