zoukankan      html  css  js  c++  java
  • 分段三次Hermite插值及其与三次样条的比较

    分段三次 Hermite 插值多项式 (PCHIP)

    语法

    p = pchip(x,y,xq)
    pp = pchip(x,y)
     

    说明

    p = pchip(x,y,xq) 返回与 xq 中的查询点对应的插值 p 的向量。p 的值由 x 和 y 的保形分段三次插值确定。

    pp = pchip(x,y) 返回一个分段多项式结构体以用于 ppval 和样条实用工具 unmkpp

    例1

    使用 spline 和 pchip 插入数据

    将 spline 和 pchip 为两个不同函数生成的插值结果进行比较。

    创建由 x 值、点 y 处的函数值以及查询点 xq 组成的向量。使用 spline和 pchip 计算查询点处的插值。绘制查询点处的插值函数值以进行比较。

    clc;clear;
    x = -3:3; %插值点x坐标
    y = [-1 -1 -1 0 1 1 1]; %插值点y坐标
    xq1 = -3:.01:3; %查询点
    p = pchip(x,y,xq1); %返回查询点的y坐标
    s = spline(x,y,xq1); %返回查询点的y坐标
    plot(x,y,'o',xq1,p,'-',xq1,s,'-.')
    legend('Sample Points','pchip','spline','Location','SouthEast')

    注:蓝色圆圈是被插值样本点。

    可以看到:样条曲线(其实也是分段多项式)在两边有轻微震荡现象,但更加光滑,因为它要求在插值点处插值函数连续,

    插值函数一阶导连续,插值函数二阶导连续,而三次分段Hermite插值函数则比价稳定,但不如样条标线的那样光滑,因为

    它只要求在插值点处插值函数连续,插值函数的一阶导连续。

    例2

    x = -5:5;
    y = [1 1 1 1 0 0 1 2 2 2 2];
    p = pchip(x,y);
    xq = -5:0.2:5;
    pp = ppval(p,xq); %返回插值函数的查询点处的y坐标
    plot(x,y,'o',xq,pp,'-.')
    ylim([-0.2 2.2])

    例3

    x = -5:5;
    y = [1 1 1 1 0 0 1 2 2 2 2];
    p = pchip(x,y);
    s = spline(x,y);
    xq = -5:0.1:5;
    pp = ppval(p,xq); %返回插值函数的查询点处的y坐标
    ss = ppval(s,xq); %返回插值函数的查询点处的y坐标
    figure(1);hold on;plot(x,y,'o',xq,pp,'-.',xq,ss,'b-')
    ylim([-0.2 2.2])
    figure(1);hold on ;legend('Sample Points','分段三次Hermite','分段三次样条','Location','SouthEast')


    PCHIP是分段三次hermit插值,但书中的该方法必须知道点的值和导数值,为什么PCHIP的变量只有函数值而没有导数值?

    在用pchip插值的过程中,matlab会基于所给的函数值来帮你估算各导数值。估算的原则是保证导数值能够正确的反映散点图的形状和变化趋势。比如在散点图是单调递增的区间内,相应点的导数值就会是正的;在散点图表现出存在局部极值点的区间,相应的导数也会产生正负的变化。
    在matlab的帮助里可以找到详细的解释,但要了解算法的细节,就要看pchip的函数文件了。

    来源:https://zhidao.baidu.com/question/573024605.html

  • 相关阅读:
    第一个独立开发的游戏 怪斯特:零 已经上线APP STORE!
    Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板
    java 实现 多态的 三要素
    mysql 基础语法掌握~ This is just the beginning.
    rem ~~ 你懂了吗?
    两个css之间的切换
    JavaScript高级程序设计(第3版)
    保持底部~~永远在底部
    文字要对齐!!!
    改变this不要怕!!!
  • 原文地址:https://www.cnblogs.com/yibeimingyue/p/11174069.html
Copyright © 2011-2022 走看看