- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1插值与逼近
function y=lagrange(x0,y0,x); n=length(x0);m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s; end x0=[0 3 5 7 9 11 12 13 14 15]; y0=[0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6]; x=0:0.1:15; lagrange(x0,y0,x) §3 差分 当节点等距时,即相邻两个节点之差(称为步长)为常数,Newton 插值公式的形式会更简单。此时关于节点间函数的平均变化率(差商)可用函数值之差(差分)来表示。 向前差分 m阶向后差分 向后差分 等距结点的插值公式 令节点 用Matlab 实现分段线性插值 用 Matlab 实现分段线性插值不需要编制函数程序,Matlab 中有现成的一维插值函 数interp1。 y=interp1(x0,y0,x,method) method 指定插值的方法,默认为线性插值。其值可为: nearest 最近项插值 linear 线性插值 spline 逐段3 次样条插值 cubic 保凹凸性3 次插值。 所有的插值方法要求 x0 是单调的。 当 x0 为等距时可以用快速插值法,使用快速插值法的格式为*nearest、*linear、 *spline、*cubic。 用Matlab 实现Hermite 插值 function y=hermite(x0,y0,y1,x); n=length(x0);m=length(x); for k=1:m yy=0.0; for i=1:n h=1.0; a=0.0; for j=1:n if j~=i h=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2; a=1/(x0(i)-x0(j))+a; end end yy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i)); end y(k)=yy; end 三次样条插值在Matlab 中的实现 y=interp1(x0,y0,x,spline); y=spline(x0,y0,x); pp=csape(x0,y0,conds),y=ppval(pp,x)。 其中 x0,y0 是已知数据点,x 是插值点,y 是插值点的函数值。 对于三次样条插值,我们提倡使用函数 csape,csape 的返回值是pp 形式,要求插值点的函数值,必须调用函数ppval。 pp=csape(x0,y0):使用默认的边界条件,即Lagrange 边界条件。 pp=csape(x0,y0,conds)中的conds 指定插值的边界条件,其值可为: complete 边界为一阶导数,即默认的边界条件 not-a-knot 非扭结条件 periodic 周期条件 second 边界为二阶导数,二阶导数的值[0, 0]。 variational 设置边界的二阶导数值为[0,0]。 例1 机床加工 待加工零件的外形根据工艺要求由一组数据(x, y)给出(在平面情况下),用程控铣床加工时每一刀只能沿x 方向和y 方向走非常小的一步,这就需要从已知数据得到加工所要求的步长很小的(x, y)坐标。 表 1 中给出的x, y数据位于机翼断面的下轮廓线上,假设需要得到x坐标每改变0.1 时的y坐标。试完成加工所需数据,画出曲线,并求出x = 0处的曲线斜率和13 ≤ x ≤ 15范围内y的最小值。 表 1 x 0 3 5 7 9 11 12 13 14 15 y 0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6 clc,clear x0=[0 3 5 7 9 11 12 13 14 15]; y0=[0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6]; x=0:0.1:15; y1=lagrange(x0,y0,x); %调用前面编写的Lagrange插值函数 y2=interp1(x0,y0,x); y3=interp1(x0,y0,x,spline); pp1=csape(x0,y0); y4=ppval(pp1,x); pp2=csape(x0,y0,second); y5=ppval(pp2,x); fprintf(比较一下不同插值方法和边界条件的结果:\n) fprintf(x y1 y2 y3 y4 y5\n) xianshi=[x,y1,y2,y3,y4,y5]; fprintf(%f\t%f\t%f\t
文档评论(0)