⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lagrange1.txt

📁 lagrange插值 快捷计算插值
💻 TXT
字号:
<PRE class=m name="code">%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   
</PRE>  
<SCRIPT src="/inc/gg_read2.js"></SCRIPT> 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -