回 帖 发 新 帖 刷新版面

主题:请教lagrange和newton插值的M文件

之前听说有这两个算法的函数,可是找了很多地方都没有找到。
后来翻查了MATLAB 6 的实例教程,上面说没有给出这两个多项式的函数,但是有M文件的代码。可是书上只有文字,没有程序。

不知道MATLAB 7 里有没有加入这两个插值多项式的函数?

回复列表 (共6个回复)

沙发

MATLAB插值函数:interp1 (一元插值,思想就是lagrange插值公式)
如果你知道这两种算法的话可自己设计程序!

板凳

function fi=lagran(x,f,xi) %lagrange插值算法
%x自变量
%f函数值
%xi插值点
%fi返回插值
 fi=zeros(size(xi));
 npl=length(f);
 for i=1:npl
     z=ones(size(xi));
     for j=1:npl
         if i~=j,z=z.*(xi-x(j))/(x(i)-x(j));end
     end
     fi=fi+z*f(i);
 end 
 return

3 楼


非常感谢~~~~~~!!!![em8]

4 楼


我的lagrange插值函数就是这样编的,在运行M文件时,老是提示Input argument 'xi' is undefined.这是怎么回事呢?请您给点意见呗。

5 楼

问了个很好吃的问题,我已经解决这个问题了,自己真是太菜了

6 楼

拉格朗日插值公式程序
function f=language(x,y,x0)
n=length(x);
syms t; f=0;
for k=1:
      lx=y(k);
     for j=1:k-1
          lx=lx*(t-x(j))/(x(k)-x(j));
     end
     for j=k+1:n
          lx=lx*(t-x(j))/(x(k)-x(j));
     end
     f=f+lx; 
end
if nargin==3
   f=subs(f,'t',x0);
else
   f=collect(f); 
   f=vpa(f,6);
end
 例: 根据下列数据点求出其拉格朗日插值多项式, 并计算它在x=1.6处的函数值。
x=[1 1.2 1.8 2.5 4];
y=[0.8415 0.932 0.9738 0.5985 -0.7568];
f1=language(x,y)
f2=language(x,y,1.6)

f1=.328112e-1*t^4-.204917*t^3-      .145485e-1*t^2+1.05427*t-
      .261189e-1
f2=0.9992

表中的数据是按y=sin(x)给出的
 sin(1.6)=0.9996, 
可见插值函数的精度是很高的。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
牛顿插值公式程序
function f=newton(x,y,x0)
n=length(x);
syms t; f=y(1);
y1=0; lx=1;
for i=1:n-1
     for j=i+1:n
           y1(j)=(y(j-1)-y(j))/(x(j-i)-x(j));
     end
     c(i)=y1(i+1); lx=lx*(t-x(i));
     f=f+c(i)*lx;
     y=y1;
end
if nargin==3
   f=subs(f,'t',x0);
else
   f=collect(f); 
   f=vpa(f,6);
end
例: 根据下列数据点求出其牛顿插值多项式, 并计算它在x=2处的函数值。
x=[1 1.2 1.8 2.5 4];
y=[1 1.44 3.24 6.25 16];
f1=newton(x,y)
f2=newton(x,y,2)

f1=.264339e-16*t^4-.171820e-  
     15*t^3+1.00000*t^2-
     .398094e-15*t+.142743e-15
f2=4

表中的数据是按 y =x2 给出的, 可见牛顿插值函数的精度也是很高的。

我来回复

您尚未登录,请登录后再回复。点此登录或注册