分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
设函数f(x)在区间[a,b]上连续,在给定n+1个不同节点上的值分别为,要求构造一个不超过n次的多项式: , 去近似函数y=f(x),使之满足插值条件:
它的几何意义是,用过n+1个不同点的n次代数曲线Ln(x)近似地代替曲线 y=f(x)
现在来构造一般插值多项式Ln(x),设在给定n+1个不同节点上的n次插值基函数分别为,则所求不超过n次的插值多项式表示为:
下面求插值基函数由条件:
可得插值基函数在各节点上函数值表为:
作为任一点的n次插值基函数分别为,由于在除外所有节点取值皆为0,因此,
含有因子,又因为为n次多项式,故
可表示为:
再由条件得
其中
将Ln称为函数f(x)的拉格朗日插值多项式。下面是算法的Matlab实现:
function [p]=Lag_Polyfit(X,Y)%Matlab函数文件Lag_Polyfit.m
%拉格朗日插值法多项式拟合
%[p]=Lag_polyfit(X,Y)
% X 拟合自变量
% Y 拟合函数值
% p 所得的拟合多项式系数
if size(X)~=size(Y)
error('变量不匹配');
end %如果要拟合的函数值与自变量维数不一样,则退出报错
tic %开始记时
format long g %设置最合适的数字格式
r=size(Y); n=r(2); %n为要拟合的数据长度
p=zeros(1,n); %保存所得多项式系数
p0=p; b=0; %工作变量
W=poly(X); %W为以X为根的多项式
dW=polyder(W); %dW为对多项式W求导后的多项式系数
z=polyval(dW,X); %z为以dW为系数的多项式对X的值
A=[1 1]; r=A; %A,r为长度为2的(1,2)向量
for i=1:n %计算循环开始
A=[1,-X(i)]; %A为一次多项式x-x(i)系数
[p0,r]=deconv(W,A); %进行多项式除法W/A,p0为商
b=Y(i)/z(i);
p0=b.*p0; %p0为累加项
p=p+p0;
end %循环结束
disp(toc) %
例如
%Matlab命令文件LagSin.m
%用拉格朗日插值法拟合[0,2*pi]上的sin函数
x0=linspace(0,2*pi,10);
y0=sin(x0); %拟合数据采样
p=Lag_Polyfit(x0,y0); %调用Lag_polyfit计算拟合多项式
x=0:0.02:2*pi;
y1=sin(x); %sin函数值
y2=polyval(p,x); %拟合多项式值
plot(x0,y0,'+',x,y2,'r') %sin函数(蓝色)与多项式(红色)效果图
命令窗口中输入lagsin观察图形输出窗口
>>logsin %函数(文件)名不区分大小写
Ruger现象: