拉格朗日插值法——matlab代码实现
程序员文章站
2022-03-13 12:57:05
...
公式:
function y=lagrange(x0,y0,x)
% 给定一系列点x0,y0
% x是我们要预测的值,由于可以有多个,因此用向量表示
% y返回我们的估计值,由于可以有多个,因此用向量表示
n = length(x);% 要预测的个数
y = zeros(n);% 初始化,并赋初值0
for k = 1:length(x0)
j_no_k=find((1:length(x0))~=k);% 在这里,find函数用于返回一个向量中不为下标k的元素(下标从1开始)
y1=1;
for j = 1:length(j_no_k)
y1 = y1.*(x-x0(j_no_k(j))); % ∏(x-xj)
end
y = y + y1*y0(k)/prod(x0(k)-x0(j_no_k));% prod函数返回数组元素的乘积
end
end
验证:给出f(x)=ln(x)
>> format(long)
>> x
x =
0.400000000000000 0.500000000000000 0.700000000000000 0.800000000000000
>> y
y =
-0.916291000000000 -0.693147000000000 -0.356675000000000 -0.223144000000000
>> lagrange(x,y,[0.4,0.54,0.6])
ans =
-0.916291000000000 -0.615647384000000 -0.509975500000000
其中0.6的精确解为-0.5108256237659907
0.54的精确解为-0.616186139423817
可见,有适当的点之后,用该法估计是不错的选择。
推荐阅读
-
BZOJ3453: tyvj 1858 XLkxc(拉格朗日插值)
-
BZOJ2655: calc(dp 拉格朗日插值)
-
拉格朗日插值学习小结
-
python数据分析与挖掘实战---拉格朗日插值法
-
BZOJ4559: [JLoi2016]成绩比较(dp 拉格朗日插值)
-
洛谷P4593 [TJOI2018]教科书般的*(拉格朗日插值)
-
计算方法实验(一):拉格朗日插值多项式
-
插值多项式的拉格朗日形式
-
插值与拟合 (一) : 拉格朗日多项式插值 、Newton插值 、分段线性插值、Hermite插值 、样条插值、 B 样条函数插值、二维插值
-
lagrange插值法:求拉格朗日插值多项式matlab实现(内附代码及例题)