目录
前言
本篇内容为个人所学知识分享
一、拉格朗日(Lagrange)插值是什么?
对于构造通过n+1个不同的节点编辑的n次插值多项式编辑,假定它满足条件
编辑
为了构造编辑,我们先定义n次插值基函数。
若n次多项式编辑在n+1个节点编辑上满足条件
编辑
则称这n+1个n次多项式编辑为节点编辑上的n次插值基函数。
且编辑
使得插值多项式可以表示为
编辑由编辑的定义,知
编辑
形如上式的插值多项式编辑便称为拉格朗日(Lagrange)插值多项式。线性插值和抛物线插值只是拉格朗日插值的特殊情况。
拉格朗日(Lagrange)插值多项式的另外一种表示形式如下:
编辑
其中
编辑
编辑
二、matlab实现代码
1.线性插值:
即n=1的时候,一次的插值函数,即已知条件为两个插值节点及其值
function y0=Linear_interpolation(x,y,x0)
%功能:线性插值
%输入:x为插值节点,y为插值节点对应的值,x0为计算点
%输出:x0处的值
y0=y(1)+(y(2)-y(1))/(x(2)-x(1))*(x0-x(1));%点斜式
y0=y(1)*(x(2)-x0)/(x(2)-x(1))+y(2)*(x0-x(1))/(x(2)-x(1));%两点式
end
2.抛物线插值:
即n=2的时候,二次的插值函数,即已知条件为三个插值节点及其值
function y0=Parabolic_interpolation(x,y,x0)
%功能:抛物线插值
%输入:x为插值节点,y为插值节点对应的值,x0为计算点
%输出:x0处的值
y0=y(1)*(x0-x(2))*(x-x(3))/(x(1)-x(2))/(x(1)-x(3))+y(2)*(x0-x(1))*(x0-x(3))...
/(x(2)-x(1))/(x(2)-x(3))+y(3)*(x0-x(1))*(x0-x(2))/(x(3)-x(1))/(x(3)-x(2));
end
3.拉格朗日(Lagrange)插值:
(一般情况)即已知条件为一串插值节点及其值
function y0 = Lagrange_interpolation(x,y,x0)
%功能:拉格朗日插值多项式求解
%输入:x为插值节点,y为插值节点对应的值,x0为计算点集
%输出:x0处值的集合y0
y0 = zeros(1,length(x0));
for i = 1:1:length(x0) %循环作用:遍历x0
X = ones(1,length(x));
for k = 1:1:length(x)%循环作用:(x0(i)-x(j))/(x(k)-x(j))的加和;
for j= 1:1:length(x)%循环作用:(x0(i)-x(j))/(x(k)-x(j))的乘积
if j ~= k
X(k) = X(k) * (x0(i)-x(j)) / (x(k)-x(j));
end
end
y0(i) = y0(i) + X(k)*y(k);
end
end
end
总结
拉格朗日插值的插值对象为:一串不同的插值节点,且知道插值节点及其值。
代码部分由于线性插值和抛物线插值是拉格朗日的特殊情况,所以小编在编写的时候,为了让看起来没有重复,选择了直接按照运算形式编写代码。
标签:拉格朗,编辑,插值法,插值,matlab,y0,x0,节点 From: https://www.cnblogs.com/bubianyingzi/p/17007066.html