插值问题(拉格朗日插值、牛顿插值)

插值问题(拉格朗日插值、牛顿插值)
agui_lagrange.m:

function f=agui_lagrange(x0,y0,x)
% x0为节点向量,y0为节点上的函数值,x为插值点,f为返回插值
n=length(x0);m=length(x);
format long
s=0.0;
for k=1:n
    p=1.0;
    for j=1:n
        if j~=k
            p=p*(x-x0(j))/(x0(k)-x0(j));
        end
    end
    s=p*y0(k)+s;
end
f=s;
end

Newton_fun.m:

function p= Newton_fun(x,xi,yi)

%参数说明:
%x:需要计算的近似值
%xi:函数表的x的数组
%yi:函数表的y的数组

%牛顿插值
n=length(xi);
f=zeros(n,n);

% 对差商表第一列赋值
for k=1:n      
    f(k)=yi(k);
end
% 求差商表
for i=2:n       % 差商表从0阶开始;但是矩阵是从1维开始存储!!!!!!
    for k=i:n
        f(k,i)=(f(k,i-1)-f(k-1,i-1))/(xi(k)-xi(k+1-i));  
    end
end
%disp('差商表如下:');
%disp(f);

%求插值多项式
p=0;          
for k=2:n
    t=1;
    for j=1:k-1
        t=t*(x-xi(j));
        disp(t)
    end
    p=f(k,k)*t+p;
    p=vpa(p,5);
    disp(p)
end
p=f(1,1)+p;

end
上一篇:matlab快速入门(26):数据导入


下一篇:MATLAB基本语法