收藏 分销(赏)

MATLAB实现拉格朗日插值.doc

上传人:人****来 文档编号:3560605 上传时间:2024-07-09 格式:DOC 页数:10 大小:122KB 下载积分:8 金币
下载 相关 举报
MATLAB实现拉格朗日插值.doc_第1页
第1页 / 共10页
MATLAB实现拉格朗日插值.doc_第2页
第2页 / 共10页


点击查看更多>>
资源描述
数值分析上机报告 题目:插值法 学号:201014924 姓名:靳会有 一、调用MATLAB内带函数插值 1、MATLAB内带插值函数列举如下: interp1 interpft interp2 interp3 interpn spline meshgrid ndgrid griddata 一维数据内插(查表法) 使用FFT方法的一维数据内插 二维数据内插(查表法) 三维数据内插(查表法) 多维数据内插(查表法) 三次样条内插 为三维绘图产生X和Y阵 为多维函数和内插产生阵列 数据网格 2、取其中的一维数据内插函数(interp1)为例,程序如下: 其调用格式为: yi=interp1(x, y, xi) yi=interp1(x, y, xi, method) 举例如下:   x=0:10:100   y=[40 44 46 52 65 76 80 82 88 92 110];   xi=0:1:100   yi=interp1(x,y,xi,'spline') 3、其他内带函数调用格式为: Interpft函数: y=interpft(x,n)   y=interpft(x,n,dim) interp2函数: ZI=interp2(X, Y, Z, XI, YI), ZI=imerp2(Z, ntimes) ZI=interp2(Z, XI, YI) ,ZI=interp2(X, Y, Z, XI, YI, method) interp3函数: VI=interp3(X,Y,Z,V,XI,YI,ZI) VI=interp3(V, ntimes) VI=interp3(V,XI,YI,ZI) VI=interp3(…, method) Interpn函数: VI=interpn(X1, X2, X3, …, V, Y1, Y2, Y3, …) VI=interpn(V, ntimes) VI=interpn(V, Yl, Y2, Y3, …)  VI=interpn(…, method) Spline函数: yi=spline(x,y,xi)   pp=spline(x,y) meshgrid函数: [X,Y]=meshgrid(x,y) [X,Y]=meshgrid(x) [X,Y,Z]=meshgrid(x,y,z) Ndgrid函数: [X1, X2, X3, …]=ndgrid(x1, x2, x3, …)   [X1, X2, X3, …]=ndgrid(x) Griddata函数: ZI=griddata(x, y, z, XI, YI) [XI, YI, ZI]=griddata(x, y, z, xi, yi)   […]=griddata(… method) 二、自编函数插值 1、拉格朗日插值法: 建立M 文件: function f = Language(x,y,x0) syms t l; if(length(x) == length(y)) n = length(x); else disp('x和y的维数不相等!'); return; %检错 end h=sym(0); for (i=1:n) l=sym(y(i)); for(j=1:i-1) l=l*(t-x(j))/(x(i)-x(j)); end; for(j=i+1:n) l=l*(t-x(j))/(x(i)-x(j)); end; h=h+l; end simplify(h); if(nargin == 3) f = subs (h,'t',x0); %计算插值点的函数值 else f=collect(h); f = vpa(f,6); %将插值多项式的系数化成6位精度的小数 end 在MATLAB中输入: x=[18 31 66 68 70 72 70;] y=[23 33 52 51 43 40 46]; f=Language(x,y) plot(x,y) 结果为: f =Inf + (-t)*Inf - 54329.8*t^2 + 1503.75*t^3 - 22.2065*t^4 + 0.16789*t^5 - 0.000512106*t^6 图形如下: MATLAB实现拉格朗日插值 建立如下拉格朗日插值函数: 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 画图程序如下: x=[-5:1:5]; y=1./(1+x.^2); x0=[-5:0.001:5]; y0=lagrange(x,y,x0); y1=1./(1+x0.^2); plot(x0,y0,'r') hold on plot(x0,y1,'g') 注:画出的图形为n =10的图形 得到图形如下: n=10的图像 牛顿K次插值多项式 一、实验目的: 1、掌握牛顿插值法的基本思路和步骤。 2、 培养编程与上机调试能力。 二、牛顿插值法基本思路与计算步骤: 给定插值点序列(。构造牛顿插值多项式。输入要计算的函数点并计算的值,利用牛顿插值公式,当增加一个节点时,只需在后面多计算一项,而前面的计算仍有用;另一方面的各项系数恰好又是各阶均差,而各阶均差可用均差公式来计算。 为 的 一阶均差。 为 的 k 阶均差。 均差表: 零阶均差 一阶均差 二阶均差 三阶均差 X0 f(X0) X1 f(X1) f[X0, X1] X2 f(X2) f[X1, X2] f[X0,X1, X2] X3 f(X3) f[X2, X3] f[X1, X2,X3] f[X0,X1, X2 X3] M M M M M 牛顿插值法计算步骤: 1. 输入值及(;要计算的函数点。 2. 对给定的由 计算的值。 3.输出。 程序清单: function[c, d]=newpoly(x, y) %牛顿插值的MATLAB实现 %这里 x为n个节点的横坐标所组成的向量,y为纵坐标所组成的向量。 %c为所求的牛顿插值多项式的系数构成的向量。 n=length(x);%取x的个数。 d=zeros(n, n);%构造nXn的空数组。 d(: , 1)=y'; for j=2 : n for k=j : n d(k, j)=(d(k, j-1) - d(k-1, j-1)) / (x(k)-x(k-j+1)); end end c =d(n, n); for k=(n-1) : - 1 : 1 c =conv(c, poly(x(k)));% conv求积,poly(x)将该多项式的系数赋给向量。 m=length(c); c(m)=c(m)+d(k, k); end 五、测试数据与结果: 测试数据:(第三章习题第三题第2题) f(x)=lnx的数值如表所示, 构造牛顿插值多项式并求ln0.53的值。 X 0.4 0.5 0.6 0.7 0.8 lnx -0.916291 -0.693147 -0.510826 -0.357765 -0.223144 解: 由表可知x0=0.4, x1=0.5, x2=0.6, x3=0.7, x4=0.7,函数值: Y0=-0.916291, y1=-0.693147, y2=-0.510826, y3=-0.357765, y4=-0.223144 建立一个主程序np.m clc clear newpoly([0.4,0.5,0.6,0.7,0.8],[ -0.916291, -0.693147, -0.510826, -0.357765, -0.223144]) 计算结果如下: ans = -0.3096 2.6083 -5.4861 5.6921 -2.4744 由此看出所求的牛顿多项式为: P(x)= -0.3096x4+2.6083x3-5.4861x2+5.6921x-2.4744 P(0.53)= -0.6347。 (注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服