文档详情

多项式插值和次样条插值.doc

发布:2017-04-06约2.99千字共5页下载文档
文本预览下载声明
已知某产品从1900年到2010年每隔10年的产量,用多项式插值和三次样条插值的方法,画出每隔一年的插值曲线的图形, 试计算并比较在不同方法下的2005年以及2015年的产量。 年份 1900 1910 1920 1930 1940 1950 产量 75.995 91.972 105.711 123.203 131.699 150.697 年份 1960 1970 1980 1990 2000 2010 产量 179.323 203.212 226.505 251.525 291.854 325.433 思想算法:多项式插值采用牛顿多项式插值法,该算法可以克服多项式插值和拉格朗日插值法的缺点,即:当用已知的n+1个数据点求出插值多项式后,又获得了新的数据点,要用它连同原有的n+1个数据点一起求出插值多项式,从原已计算出的n次插值多项式计算出新的n+1次插值多项式是很困难的,必须全部重新计算。而牛顿插值法可以克服这一缺点。 三次样条插值不仅在节点增多使子区间减少时,误差随之减少,也使曲线具有足够的光滑性。 Matlab程序如下 程序一:牛顿插值法 源程序名称Newton.m clear all; x=0:10:110; y=[75.995,91.972,105.711,123.203,131.699,150.697,179.323,203.212,226.505,251.525,291.854,325.433]; n=length(x);syms t; for k=2:n for i=n:-1:k y(i)=(y(i)-y(i-1))/(x(i)-x(i-k+1)); end; end; N=y(1); for i=2:n W=1; for j=1:(i-1) W=W*(t-x(j)); end; N=N+y(i)*W; end; N=expand(N); ezplot(N,[0,120]); hold on; format short; Q=[]; for i=0:120 Q(i+1)=subs(N,t,i); end; T=0:120; plot(T,Q,^); title(产量随时间变化曲线); xlabel(T/时间); ylabel(Q/产量); N105=subs(N,t,105); N115=subs(N,t,115); 程序二:三次样条插值 源程序名称SPLINEM.m clear all; x=0:10:110; y=[75.995,91.972,105.711,123.203,131.699,150.697,179.323,203.212,226.505,251.525,291.854,325.433]; n=length(x);syms t; for i=1:n p(i)=y(i); end; for k=2:3 for i=n:-1:k p(i)=(p(i)-p(i-1))/(x(i)-x(i+1-k)); end; end; h(2)=x(2)-x(1); for i=2:(n-1) h(i+1)=x(i+1)-x(i); c(i)=h(i+1)/(h(i)+h(i+1)); a(i)=1-c(i); b(i)=2; p(i)=6*p(i+1); end; p(1)=0;p(n)=0;c(1)=0;b(1)=2;b(n)=2;a(n)=0; u(1)=b(1);z(1)=p(1); for k=2:n l(k)=a(k)/u(k-1);u(k)=b(k)-l(k)*c(k-1); z(k)=p(k)-l(k)*z(k-1); end; M(n)=z(n)/u(n); for k=(n-1):-1:1 M(k)=(z(k)-c(k)*M(k+1))/u(k); end; for i=2:n S(i)=M(i-1)*(x(i)-t)^3/(6*h(i))+M(i)*(t-x(i-1))^3/(6*h(i))+(y(i-1)-M(i-1)*h(i)^2/6)*(x(i)-t)/h(i)+(y(i)-M(i)*h(i)^2/6)*(t-x(
显示全部
相似文档