IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> matlab插值:拉格朗日插值 -> 正文阅读

[数据结构与算法]matlab插值:拉格朗日插值

拉格朗日插值即对所要插值的函数进行拉格朗日多项式拟合

这是matlab插值系列的第二期,第一期:[数值分析拟合]Matlab三次样条插值拟合数据

(以后会有时间的时候再更新更多的插值方法)

这篇文章我推导过程参考过了一些其他文章,代码是自己写的,如有不对或者公式打错了欢迎批评指正

首先,对于所需要插值的自变量x和所需插值的数据点y:

一、我们先来了解它的插值原理:

????????对于在一组数值散点中的任意一点进行插值,找到一个满足相应条件的n次多项式,我们希望能用所有点的函数值去表示它,并且每一点的函数值都与原来的函数值相符合。

????????因此,设原数据的每一个点的函数值为y_i,为了组成插值所得到的y(x),前面配凑的系数是l_i,那么则有:

? ? ? ? 记从0开始推导,则
????????y(x) = l_0y_0+l_1y_1+l_2y_2+...+l_ny_n = \sum_{i=1}^n l_iy_i

????????那么由两个点的插值开始,所得的应当是线性插值

则有?\begin{Bmatrix} l_0(x_0)y_0 +l_1(x_0)y_1=y0\\ l_0(x_1)y_0+l_1(x_1)y_1=y1 \end{Bmatrix}?那么显然有\begin{Bmatrix} l_0(x_0)=l_1(x_1)=1\\ l_0(x_1)=l_1(x_0)=0 \end{Bmatrix}

对于中间的每一个点,都应当有

y(x) = y_0+\frac{y_1-y_0}{x_1-x_0}(x-x_0) =\frac{x_1-x}{x_1-x_0}y_0 +\frac{x-x_0}{x_1-x_0}y_1

整理得到

y(x) =\frac{x-x_1}{x_0-x_1}y_0 +\frac{x-x_0}{x_1-x_0}y_1

那么从0开始,则其插值的系数为

l_1 = \frac{x-x_1}{x_0-x_1},l_2 = \frac{x-x_0}{x_1-x_0}, 有l_i(x_j) = \delta_{ij}=\begin{Bmatrix} 1 & i=j\\ 0&i\neq j \end{Bmatrix}

这时,规律不够明显, 因此我们采用更多的点来进行相关的推导

当点的个数为n+1时,为了保证l_i(x_j) = \delta_{ij}=\begin{Bmatrix} 1 & i=j\\ 0&i\neq j \end{Bmatrix}依然成立

首先,为了保证下方条件,分子为

?(图片来自参考文章

拉格朗日(Lagrange)插值多项式的基函数构造法(详细推导)

此时,根据\delta_{ij} = 1,可以有n+1个方程,那么由于有n+1个c(c0,c1,c2....cn),则可通过解方程唯一确定对应的c0,解出c0后,即可确定

l_0(x)= \prod_{i=0,i\neq j}^n \frac{x-x_j}{x_i-x_j},y(x) = \sum_{i=0}^{n}l_iy_i

通过以上的公式推导,下面使用MATLAB来实现上述的计算内容

先加上我在里面调用的len.m

%返回一维数组长度(行数或列数其中大的一个,必须是一位数组)
function [length]=len(A)

    s=size(A);
    if s(2)==1
        length=s(1); %取行
    end
    if s(1)==1
        length=s(2);
    end
    if s(1)~=1 && s(2)~=1
        disp('必须是单行向量或单列向量')
        return
    end
            
end

编写函数? ? ?Lagrange.m计算拉格朗日插值:

其中许多的注释我用英语写的看着别嫌麻烦哈,这段时间为了学英语我也在天天头皮发麻)? ?

% *** Lagrange  interpolation ***
function L = Lagrange(x,y,x_2)
% x --origional x vector
% y --origional y vector need to be interpolated
% x_2 --the vector x that you want to interpolate to 
% author:FriedParrot   --2022-2-4
if len(x) ~= len(y)
    error('The length of x and y should be correspond');
end

xi = x_2;  %  generate the vector that need to be interpolated
% define the initial vectors
L = zeros(1,len(xi));

for i = 1:1:len(xi)  % This is the index of the xi(to be interpolated)
    l = ones(1,len(x));  % it is used every time
    for k = 1:1:len(x)
        for j= 1:1:len(x)
            if j ~= k  % similar to prod but the denominator shouldn't be zero
                l(k) = l(k) * ( xi(i)-x(j)) / (x(k)-x(j));
                % the index should be k --the first index of the iteration
            end
        end % cacultte the l_j
        L(i) = L(i) + l(k)*y(k);  % just for every single loop of s
    end
end

if nargout == 0
    figure('name','Lagrange Interpolation');
    plot(xi,L);
end

end

下面加上测试代码以及效果:

(代码使用外插值,即公式中的范围比数据的范围更广)

x = [1,2,4,6,8,9];
y =  cos(x);
x_2 = 0:0.05:10;
Lagrange(x,y,x_2);

插值效果:?

?

参考文章:

拉格朗日(Lagrange)插值多项式的基函数构造法(详细推导)

mathworld里关于Lagrange插值的简介(用翻墙软件可以进)

《专题一:插值法(1)拉格朗日插值法》

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章           查看所有文章
加:2022-02-05 21:57:54  更:2022-02-05 22:00:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:26:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码