logo资料库

MATLAB实现插值与拟合.docx

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
实验三 插值与拟合
实验三 插值与拟合 实验任务:拉格朗日插值、*牛顿插值法、*三次样条插值、多项式拟合 实验目的: 掌握拉格朗日插值、*牛顿插值法、*三次样条插值的原理,熟悉 MATLAB 相关函数的调用,利用 MATLAB 程序实现算法 实验课时:4 学时 预备学习: 1. P79 拉格朗日插值应用例题; 2. *P90 三次样条插值应用例题; 3. P99-102Matlab 相关函数及应用例题; 练习: 1. P105 习题 3,*习题 8,习题 12(非上机题); 2. P106 实验 2,*实验 4,实验 8(可调用 Matlab 内置函数)。 实验程序: 程序 4.1(拉格朗日插值) function yy=nalagr(x,y,xx) m=length(x);n=length(y); if m~=n,error;end s=0; for i=1:n t=ones(1,length(xx)); for j=1:n t=t.*(xx-x(j))/(x(i)-x(j)); if j~=i, end end s=s+t*y(i); end yy=s; 程序 4.2(三次样条插值) function m=naspline(x,y,dy0,dyn,xx) n=length(x)-1; h=diff(x);lemda=h(2:n)./(h(1:n-1)+h(2:n));mu=1-lemda; g=3*(lemda.*diff(y(1:n))./h(1:n-1)+mu.*diff(y(2:n+1))./h(2:n)); g(1)=g(1)-lemda(1)*dy0;g(n-1)=g(n-1)-mu(n-1)*dyn; dy=nachase(lemda,2*ones(1:n-1),mu,g); m=[dy0;dy;dyn]; if nargin>=5 s=zeros(size(xx));
for i=1:n if i==1, kk=find(xx<=x(2)); elseif i==n kk=find(xx>x(n)); kk=find(xx>x(i)&xx<=x(i+1)); end xbar=(xx(kk)-x(i))/h(i); else end m=s; s(kk)=alpha0(xbar)*y(i)+alpha1(xbar)*y(i+1)+h(i)*beta0(xbar)*m(i)+h(i)*beta1(xbar) *m(i+1); end function x=nachase(a,b,c,d) n=length(a); for k=2:n b(k)=b(k)-a(k)/b(k-1)*c(k-1); d(k)=d(k)-a(k)/b(k-1)*d(k-1); x(k)=(d(k)-c(k)*x(k+1))/b(k); end x(n)=d(n)/b(n); for k=n-1:-1:1 end x=x(:); function y=alpha0(x) y=2*x.^3-3*x.^2+1; function y=alpha1(x) y=-2*x.^3+3*x.^2; function y=beta0(x) y=x.^3-2*x.^2+x; function y=beta1(x) y=x.^3-x.^2;
分享到:
收藏