function yy =lagrange(x,y,xx)% input:(x,y):输入的离散点
% xx:插值的横坐标
% output: yy: 插值实现的多项式函数关于xx
m =length(x);
n =length(y);
yy =zeros(1,length(xx));if m~= n %横纵坐标个数不相等 出错
disp('ERROR:x,y维度不一致');else%先计算插值基函数li(x)for i =1:n
tmp =ones(1,length(xx));for j =1:n
if i~=j
tmp = tmp.*(xx -x(j))./(x(i)-x(j));
end
end
yy = yy + tmp *y(i);
end
end
end
对一个点
x
x
xx
xx 操作 :
t
m
p
=
1
tmp = 1
tmp=1
t
m
p
=
t
m
p
∗
(
x
x
−
x
(
j
)
)
/
(
x
(
i
)
−
x
(
j
)
)
;
tmp = tmp*(xx - x(j))/(x(i) - x(j));
tmp=tmp∗(xx−x(j))/(x(i)−x(j));
对于一系列点
x
x
xx
xx (多维)操作: 对每一个点分别进行如上操作,转换为向量化表示
t
m
p
=
o
n
e
s
(
1
,
l
e
n
g
t
h
(
x
x
)
)
tmp = ones(1,length(xx))
tmp=ones(1,length(xx))
t
m
p
=
[
1
,
1
,
1
,
.
.
.
.
,
1
]
tmp=[1,1,1,....,1]
tmp=[1,1,1,....,1] (每一个
1
1
1 对应一个点的结果)
t
m
p
=
t
m
p
.
∗
(
x
x
−
x
(
j
)
)
.
/
(
x
(
i
)
−
x
(
j
)
)
;
tmp = tmp.*(xx - x(j))./(x(i) - x(j));
tmp=tmp.∗(xx−x(j))./(x(i)−x(j));
结果
x =[0:0.01:1];
y =lagrange([0,1,0.5],[0,1,2],x);plot(x,y);