matlab编写分段Hermite插值多项式

news/2025/1/16 2:59:22 标签: matlab, 开发语言

文章目录

    • 原理
      • 使用分段Hermite插值多项式原因
      • 公式
        • 第一类的两个插值积函数
        • 第二类的两个插值积函数
      • 例题
        • 法一
        • 法二
    • 代码
      • 分段 Hermite 插值的思路:
      • 分段 Hermite 插值多项式的构造:
      • MATLAB 实现代码:
      • 结果如图:
      • 归一化变量的作用:

原理

使用分段Hermite插值多项式原因

对牛顿插值多项式和拉格朗日插值多项式分析的时候,我们发现当我们用高次插值多项式逼近 f ( x ) f(x) f(x)时候,会发生龙格现象,为克服这种现象,我们引入分段线性,分段二次拉格朗日插值多项式,可以看出这两种插值函数,具有良好的一致收敛性。
但是他有个致命的缺点,呢就是它不是光滑的。即它在节点处的左右导数不相同。在插值条件中引入导数的条件,即分段Hermite插值多项式。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

公式

第一类的两个插值积函数

在这里插入图片描述

第二类的两个插值积函数

在这里插入图片描述
在这里插入图片描述

如果要求插值函数具有连续性时候,我们既可以用分段拉格朗日也可以用分段Hermite,但是如果我们要求插值函数必须具有一阶连续导数,来近似 f ( x ) f(x) f(x)时候,我们只能采用三次Hermite插值,而不能用三次拉格朗日插值,

例题

法一

在这里插入图片描述

法二

在这里插入图片描述

代码

在 MATLAB 中编写 分段 Hermite 插值多项式,可以利用给定的节点以及每个节点的函数值和导数值来构造插值多项式。分段 Hermite 插值多项式不仅通过数据点(( x_i, y_i ))进行插值,而且还通过节点的导数信息进行插值,能够提供更平滑的插值曲线。

分段 Hermite 插值的思路:

假设给定的插值数据为:
[ x 0 , x 1 , … , x n ] [x_0, x_1, \dots, x_n] [x0,x1,,xn]
对应的函数值是:
[ y 0 , y 1 , … , y n ] [ y_0, y_1, \dots, y_n ] [y0,y1,,yn]
对应的导数值是:
[ y 0 ′ , y 1 ′ , … , y n ′ ] [ y'_0, y'_1, \dots, y'_n ] [y0,y1,,yn]
Hermite 插值多项式可以通过每对相邻的节点 ( ( x i , x i + 1 ) ) (( x_i, x_{i+1} )) (xi,xi+1)构建一个二次多项式 ( H i ( x ) ) ( H_i(x) ) (Hi(x)),而最终的插值多项式 ( P(x) ) 是这些二次多项式的分段拼接。

分段 Hermite 插值多项式的构造:

对于两个相邻的节点 ( ( x i , y i ) ) ( (x_i, y_i) ) ((xi,yi)) ( x i + 1 , y i + 1 ) (x_{i+1}, y_{i+1}) (xi+1,yi+1),其对应的 Hermite 插值多项式为:

在这里插入图片描述
在这里插入图片描述
即:
H i ( x ) = ( 2 ( x − x i ) 3 − 3 ( x − x i ) 2 + 1 ) y i + ( ( x − x i ) 3 − 2 ( x − x i ) 2 + ( x − x i ) ) h i + ( − 2 ( x − x i + 1 ) 3 + 3 ( x − x i + 1 ) 2 ) y i + 1 + ( ( x − x i + 1 ) 3 − ( x − x i + 1 ) 2 ) h i + 1 H_i(x) = (2(x - x_i)^3 - 3(x - x_i)^2 + 1) y_i + ((x - x_i)^3 - 2(x - x_i)^2 + (x - x_i)) h_i\\+ (-2(x - x_{i+1})^3 + 3(x - x_{i+1})^2) y_{i+1} + ((x - x_{i+1})^3 - (x - x_{i+1})^2) h_{i+1} Hi(x)=(2(xxi)33(xxi)2+1)yi+((xxi)32(xxi)2+(xxi))hi+(2(xxi+1)3+3(xxi+1)2)yi+1+((xxi+1)3(xxi+1)2)hi+1
在这里插入图片描述

其中,$( h_i ) $和 $( h_{i+1} ) $分别是导数值 ( y i ′ ) ( y'_i ) (yi) ( y i + 1 ′ ) ( y'_{i+1} ) (yi+1) 的权重。
满足:
在这里插入图片描述

MATLAB 实现代码:

matlab">x = [0, 1, 2];   % x 坐标
y = [1, 2, 0];   % y 坐标
dy = [1, -1, 2]; % 导数值
X = linspace(0, 2, 100);  % 生成 100 个插值点


n = length(x);  % 数据点的个数
    m = length(X);  % 插值点的个数
    H = zeros(1, m); % 用于存储结果
    
    for k = 1:m
        xi = X(k);  % 当前插值点
        % 计算每个分段的插值
        sum_val = 0;
        for i = 1:n-1
            % 构造 Hermite 插值的每一段
            if xi >= x(i) && xi <= x(i+1)
                % 计算 Hermite 插值多项式
                t = (xi - x(i)) / (x(i+1) - x(i)); % 归一化变量
                
                % Hermite插值的基函数
                h00 = 2*t^3 - 3*t^2 + 1;
                h10 = t^3 - 2*t^2 + t;
                h01 = -2*t^3 + 3*t^2;
                h11 = t^3 - t^2;
                
                % 计算当前段的插值
                sum_val = y(i)*h00 + dy(i)*(x(i+1)-x(i))*h10 + y(i+1)*h01 + dy(i+1)*(x(i+1)-x(i))*h11;
            end
        end
        H(k) = sum_val;
    end

x = [0, 1, 2]; % x 坐标
y = [1, 2, 0]; % y 坐标

结果如图:

在这里插入图片描述
H ( x ) H(x) Hx有一阶导数

进行归一化不影响函数值:
在这里插入图片描述

在这里插入图片描述

matlab">t = (xi - x(i)) / (x(i+1) - x(i));

在分段 Hermite 插值多项式 中的作用是将插值点 ( x_i ) 和 ( x_{i+1} ) 之间的区间线性化,使得插值的计算变得更加简单和规范。这一过程的主要目的是 将原始区间 ( [x_i, x_{i+1}] ) 映射到标准化的单位区间 ( [0, 1] ),便于后续的插值运算。

归一化变量的作用:

归一化变量 ( t = x i − x ( i ) x ( i + 1 ) − x ( i ) ) ( t = \frac{xi - x(i)}{x(i+1) - x(i)} ) (t=x(i+1)x(i)xix(i)) 的目的是将原始区间 ( [ x i , x i + 1 ] ) ( [x_i, x_{i+1}] ) ([xi,xi+1]) 转换到标准化的区间 ( [0, 1] )。这样做的好处是:

  • 使得插值多项式的计算不依赖于原始数据的尺度或位置。
  • 使得插值公式在不同区间之间的一致性得以保持,便于构建和计算 Hermite 插值多项式。

http://www.niftyadmin.cn/n/5824590.html

相关文章

【Unity-Animator】通过 StateMachineBehaviour 实现回调

StateMachineBehaviour 简介 StateMachineBehaviour是一个基类&#xff0c;所有状态脚本都派生自该类。它可以在状态机进入、退出或更新状态时执行代码&#xff0c;而无需编写自己的逻辑来测试和检测状态的变化。这使得开发者可以更方便地处理状态转换时的逻辑&#xff0c;例…

arcgis中生成格网矢量带高度

效果 1、数据准备 (1)矢量边界(miain.shp) (2)DEM(用于提取格网标高) (3)DSM(用于提取格网最高点) 2、根据矢量范围生成格网 模板范围选择矢量边界,像元宽度和高度根据坐标系来输入,我这边是4326的,所以输入的是弧度,输出格网矢量gewang.shp 3、分区统计 …

JVM之垃圾回收器ZGC概述以及垃圾回收器总结的详细解析

ZGC ZGC 收集器是一个可伸缩的、低延迟的垃圾收集器&#xff0c;基于 Region 内存布局的&#xff0c;不设分代&#xff0c;使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记压缩算法 在 CMS 和 G1 中都用到了写屏障&#xff0c;而 ZGC 用到了读屏障 染色指针&a…

【2025 Rust学习 --- 16 集合:Rust的STL】

集合 — Rust的STL CPP —> Standard Template Library Rust 标准库包含多个集合&#xff0c;这些集合是泛型类型&#xff0c;用于在内存中存储各种数据。 Rust 的集合与其他语言的集合之间的一些系统性差异&#xff1a; 首先&#xff0c;移动和借用无处不在。Rust 使用…

APISQL在线一键安装教程

本文档将指导您在 Linux 服务器上使用 Docker 安装 APISQL 软件。提供了两种安装方式&#xff1a;在线安装和离线安装&#xff0c;您可以根据实际环境选择合适的安装方式。 1. 准备工作 1.1 硬件要求 Linux (x86_64) 服务器 1.2 软件要求 Docker Engine 推荐版本&#xff…

【案例81】NMC调用导致数据库的效率问题

问题现象 客户在使用NC系统时&#xff0c;发现系统特别卡顿。需要紧急排查。 问题分析 排查NMC发现&#xff0c;所有的线程都处于执行SQL层面&#xff0c;说明数据库当前出现了异常。查看数据库资源状态发现&#xff0c;Oracle相关进程CPU利用率达到了100%。 查看现在数据库…

智能物流升级利器——SAIL-RK3576核心板AI边缘计算网关设计方案(一)

近年来&#xff0c;随着物流行业智能化和自动化水平不断提升&#xff0c;数据的实时处理与智能决策成为推动物流运输、仓储管理和配送优化的重要手段。传统的集中式云平台虽然具备强大计算能力&#xff0c;但高延迟和带宽限制往往制约了物流现场的即时响应。为此&#xff0c;我…

Python海龟绘图库:从入门到精通 - Python官方文档(三万字解析!)

turtle --- 海龟绘图 源码&#xff1a; Lib/turtle.py 概述 海龟绘图是对 最早在 Logo 中引入的受欢迎的几何绘图工具 的实现&#xff0c;它由 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 在 1967 年开发。 入门 请想象绘图区有一只机器海龟&#xff0c;起始位置在…