欢迎光临散文网 会员登陆 & 注册

计算方法实验三

2023-03-27 20:40 作者:啊啊啊不不不b  | 我要投稿



一、实验名称:

实验三、插值逼近

二、实验目的:

1. 掌握Lagrange插值、Newton插值的概念;

2. 编写程序实现;

3. 观察Runge现象。

三、实验内容及要求:


1.%E5%B7%B2%E7%9F%A5%E5%87%BD%E6%95%B0f(x)%3D1%2F(1%2Bx%5E2%20)%2Cx%E2%88%88%5B-5%2C5%5D%EF%BC%8C%E5%AF%B9%E5%AE%9A%E4%B9%89%E5%9F%9F%5B-5%2C5%5D%E8%BF%9B%E8%A1%8Cn%E7%AD%89%E5%88%86%EF%BC%9B

(a)取n%3D5%2C10%2C20%2C40,以等分节点为插值节点,构造Lagrange插值公式,用程序计算各等分区间中点处的值,列表显示(给出插值多项式及函数在等分区间中点处值),并分别作出和插值函数的图形(将5个图形画在同一张图里,并用不同颜色表示,四个插值多项式及一f(x)个图形);

(b)取,以等分节点为插值节点,构造牛顿插值函数,用程序计算各等分区间中点处的值,列表显示(给出插值多项式及函数在等分区间中点处值),并分别作出和插值函数的图形(将5个图形画在同一张图里,并用不同颜色表示,四个插值多项式及一个图形);

(c)取,在剖分的基础上简历分片线性Lagrange插值函数,用程序计算各等分区间中点处的值,列表显示(给出插值多项式及函数在等分区间中点处值),并分别作出和插值函数的图形(将5个图形画在同一张图里,并用不同颜色表示,四个插值多项式及一个图形);

2.实现课本39页例2.12,取,分别作出和插值函数的图形(将5个图形画在同一张图里,并用不同颜色表示,四个插值多项式及一个图形);观察Runge现象。

三、实验步骤(或记录)

1、(a)

插值多项式及函数在等分区间中点处值                                                                                                                                                                                                                                                                                                                                                   

Y     0.038461538   0.042440318   0.047058824   0.052459016   0.058823529   0.066390041   0.075471698        0.086486486   0.1   0.116788321   0.137931034   0.164948454   0.2   0.246153846   0.307692308        0.390243902   0.5   0.64 0.8   0.941176471   1      0.941176471   0.8   0.64 0.5   0.390243902   0.307692308        0.246153846   0.2   0.164948454   0.137931034   0.116788321   0.1   0.086486486   0.075471698        0.066390041   0.058823529   0.052459016   0.047058824   0.042440318   0.038461538

y1    -0.048076923 0.321153846   0.567307692   0.321153846   -0.048076923                                                                                                                                                                                                                                                                                                      

y2    1.57872099     -0.226196289 0.253755457   0.235346591   0.84340743     0.84340743     0.235346591        0.253755457   -0.226196289 1.57872099                                                                                                                                                                                                                                                                

y3    -39.95244903 3.4549578       -0.447051961 0.202422616   0.080659993   0.17976263     0.238445934        0.395093054   0.636755336   0.94249038     0.94249038     0.636755336   0.395093054   0.238445934        0.17976263     0.080659993   0.202422616   -0.447051961 3.4549578       -39.95244903                                                                                                                                                                        

y4    -57409.17974 2287.728499   -156.169717   15.42434982   -1.939791158 0.39938813     0.014910807        0.10858616     0.103537161   0.128151723   0.150063036   0.181523667   0.221349033   0.274733128        0.345913865   0.441399666   0.566357999   0.719110364   0.876706771   0.984617272   0.984617272        0.876706771   0.719110364   0.566357999   0.441399666   0.345913865   0.274733128   0.221349033        0.181523667   0.150063036   0.128151723   0.103537161   0.10858616     0.014910807   0.39938813     -1.939791158   15.42434982   -156.169717   2287.728499   -57409.17974

%构造lagrange插值函数,参考:https://blog.csdn.net/qq_44692057/article/details/108314856
  function y=lagr(X,Y,x)
  n=length(X);
  m=length(x);
  for i=1:m
      z=x(i);
      s=0;
      for k=1:n
          p=1;
          for j=1:n
              if j~=k
                  p=p*(z-X(j))/(X(k)-X(j));
              end
          end
          s=p*Y(k)+s;
      end
      y(i)=s;
  end
 
  %输入已知量(第2次a问)
  clear;
  n=[5 10 20 40];
  for a=1:4
  b=10/n(a);
  i=1:n(a)+1;
  j=-5:b:5;
  x=[i;j];
  for k=1:n(a)+1
          X(k)=x(2,k)
          Y(k)=1/(1+X(k)*X(k));
      end
  for l=1:n(a)
      x0(l)=(x(2,l)+x(2,l+1))/2;
  end
  if a==1
      y1=lagr(X,Y,x0);
      x1=x0;
  elseif a==2
              y2=lagr(X,Y,x0);
              x2=x0;
  elseif a==3
          y3=lagr(X,Y,x0);
          x3=x0;
  elseif a==4
          y4=lagr(X,Y,x0);
          x4=x0;
 
  end
 
  end
  %画图比较精确值
  figure(1)
  xc=[-5:0.05:5]
  plot(xc,1./(1+xc.*xc),'k')
  hold on
  plot(x1,y1,'r')
  hold on
  plot(x2,y2,'y')
  hold on
  plot(x3,y3,'b')
  hold on
  plot(x4,y4,'g')
  hold off
  figure(2)
  xc=[-5:0.05:5]
  plot(xc,1./(1+xc.*xc),'k')
  hold on
  plot(x1,y1,'r')
  hold on
  plot(x2,y2,'y')
  hold on
  plot(x3,y3,'b')
  hold on
  plot(x4,y4,'g')
  hold off
  axis([-5,5,-1,1])
  得出图像

(b)

%构造newton插值参考https://zhuanlan.zhihu.com/p/34883522
  function    N  = Newton( x,y,t )
  syms   p   ;   %定义符号变量
  N = y(1);
  dd = 0;
  dxs = 1;
  n = length(x);
  for(i = 1:n-1)
        for(j = i+1:n)
          dd(j) = (y(j)-y(i))/(x(j)-x(i));
      end
      temp1(i) = dd(i+1);
      dxs = dxs*(p-x(i));
      N = N + temp1(i)*dxs;
      y = dd;
  end
    simplify(N);
  %以上为计算部分,下面是输出规则;
  if(nargin == 2)
      N = subs(N,'p','x');
      N = collect(N);
      N = vpa(N,4);
  else
      m = length(t);
      for i =   1:m
         temp(i) = subs(N,'p',t(i));
      end
      N = temp;
  end
 
  %输入已知量(第2次a问)
  clear;
  n=[5 10 20 40];
  for a=1:4
  b=10/n(a);
  i=1:n(a)+1;
  j=-5:b:5;
  x=[i;j];
  for k=1:n(a)+1
          X(k)=x(2,k)
          Y(k)=1/(1+X(k)*X(k));
      end
  for l=1:n(a)
      x0(l)=(x(2,l)+x(2,l+1))/2;
  end
  if a==1
      y1=Newton(X,Y,x0);
      x1=x0;
  elseif a==2
              y2=Newton(X,Y,x0);
              x2=x0;
  elseif a==3
          y3=Newton(X,Y,x0);
          x3=x0;
  elseif a==4
          y4=Newton(X,Y,x0);
          x4=x0;
 
  end
 
  end
  %画图比较精确值
  figure(1)
  xc=[-5:0.05:5]
  plot(xc,1./(1+xc.*xc),'k')
  hold on
  plot(x1,y1,'r')
  hold on
  plot(x2,y2,'y')
  hold on
  plot(x3,y3,'b')
  hold on
  plot(x4,y4,'g')
  hold off
  figure(2)
  xc=[-5:0.05:5]
  plot(xc,1./(1+xc.*xc),'k')
  hold on
  plot(x1,y1,'r')
  hold on
  plot(x2,y2,'y')
  hold on
  plot(x3,y3,'b')
  hold on
  plot(x4,y4,'g')
  hold off
  axis([-5,5,-1,1])
  得出图像

(c)

%构造分段线性插值函数
  function y=fenduan(X,Y,x)
  n=length(X);
  m=length(x);
  for j=1:m
      for i=1:n-1
          if x(j)>X(i)&&x(j)<=X(i+1)
              y(j)=((x(j)-X(i+1))/(X(i)-X(i+1)))*Y(i)+(((x(j)-X(i))/(X(i+1)-X(i)))*Y(i+1));
          end
      end
  end
 
  %第二次c问
  clear;
  n=[5 10 20 40];
  for a=1:4
  b=10/n(a);
  i=1:n(a)+1;
  j=-5:b:5;
  x=[i;j];
  for k=1:n(a)+1
          X(k)=x(2,k)
          Y(k)=1/(1+X(k)*X(k));
      end
  for l=1:n(a)
      x0(l)=(x(2,l)+x(2,l+1))/2;
  end
  if a==1
      y1=fenduan(X,Y,x0);
      x1=x0;
  elseif a==2
              y2=fenduan(X,Y,x0);
              x2=x0;
  elseif a==3
          y3=fenduan(X,Y,x0);
          x3=x0;
  elseif a==4
          y4=fenduan(X,Y,x0);
          x4=x0;
 
  end
 
  end
  %画图比较精确值
  xc=[-5:0.05:5]
  plot(xc,1./(1+xc.*xc),'k')
  hold on
  plot(x1,y1,'r')
  hold on
  plot(x2,y2,'y')
  hold on
  plot(x3,y3,'b')
  hold on
  plot(x4,y4,'g')
  hold off

得出图像

2、

%d2
  clear;
  n=[4 6 8 10];
  x0=[-1:0.005:1];
  for a=1:4
  b=2/n(a);
  X=-1:b:1;
  for i=1:n(a)+1
  Y(i)=1/(1+25*X(i)*X(i))
  end
  if a==1
      y1=lagr(X,Y,x0);
  elseif a==2
              y2=lagr(X,Y,x0);
  elseif a==3
          y3=lagr(X,Y,x0);
  elseif a==4
          y4=lagr(X,Y,x0);
  end
  end
  %画图比较精确值
  plot(x0,1./(1+25*x0.*x0),'k')
  hold on
  plot(x0,y1,'r')
  hold on
  plot(x0,y2,'y')
  hold on
  plot(x0,y3,'b')
  hold on
  plot(x0,y4,'g')
  hold off

得出图像


计算方法实验三的评论 (共 条)

分享到微博请遵守国家法律