发 帖  
原厂入驻New
[问答]

如何用MATLAB拉格朗日插值法作图

7999 matlab 拉格朗日
分享
如何用matlab拉格朗日插值法作图
0
2011-11-3 16:27:06   评论 分享淘帖 邀请回答
1个回答
计算卫星定位么?? 要几次插值的 给你一次和二次的吧
1.n个节点分段Lagrange插值多项式;
%2.使用格式y=lagrange(x0,y0,x,k);
%3.输入项x0为n维插值节点向量,y0为n维被插函数值向量;
%4.x为m维插值点向量,k为分段插值多项式次数,不超过3,缺省为k=1;
%5.输出y为插值点x处的函数值;
%6.本程序于2002.4.21.编写?  
function y=lagrange(x0,y0,x,k)
if nargin<4,k=1;end
if k>3,error('分段次数过高,容易产生Runge现象,请重新选择次数k.'),end
n=length(x0);
m=length(x);
nn=1;
for i=1:m
   u=x(i);
   switch k
   %---------------------------针对不同的k判断插值区间   
   case 1
      if u<=x0(2)
         t=1;   
      elseif u>x0(n-1)
         t=n-1;  
      else
         for j=nn+1:n-2
            if u>x0(j)&u<=x0(j+1)
               t=j;nn=t-1;break
            end
         end
      end
   %---------------------------   
   case 2
      if u<=(x0(2)+x0(3))/2
         t=1;
      elseif u>(x0(n-2)+x0(n-1))/2
         t=n-2;
      else
         for j=nn+1:n-3
            if u>(x0(j)+x0(j+1))/2 & u<=(x0(j+1)+x0(j+2))/2
               t=j;nn=t-1;break
            end
         end
      end
   %---------------------------   
   case 3
      if u<=x0(3)
         t=1;
      elseif u>x0(n-2)
         t=n-3;
      else
         for j=nn+2:n-3
            if u>x0(j) & u<=x0(j+1)
               t=j-1;nn=t;break
            end
         end
      end
   end
   %--------------------------------主程序
  s=0;
  for j=t:t+k
      L=1;
       for p=t:t+k
          if p~=j
            L=L*(u-x0(p))/(x0(j)-x0(p));
          end
       end
      s=s+L*y0(j);
    end
   y(i)=s;
end

分段线性Lagrange插值
% 命令格式:y=lagrange1(x0,y0,x)
% x0为节点向量,y0为对应的函数值向量,
% x为插值点向量,返回值y为x处的函数近似值向量。
function y=lagrange1(x0,y0,x)
[n1,n]=size(x0);[n1,m]=size(x);
for i=1:m
   u=x(i);
   if u<=x0(2)
      y(i)=y0(1)*(u-x0(2))/(x0(1)-x0(2))+...
         y0(2)*(u-x0(1))/(x0(2)-x0(1));
   elseif u>=x0(n-1)
      y(i)=y0(n-1)*(u-x0(n))/(x0(n-1)-x0(n))+...
         y0(n)*(u-x0(n-1))/(x0(n)-x0(n-1));
   else
      for k=2:n-1
         if u>=x0(k) & u<=x0(k+1)
            y(i)=y0(k)*(u-x0(k+1))/(x0(k)-x0(k+1))+...
               y0(k+1)*(u-x0(k))/(x0(k+1)-x0(k));
         end
      end
   end
end  
y;

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表