插值算法

插值算法

1. 插值的作用

数模比赛中,常常需要根据已知的函数点进行数据、模型的处理和分析,有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法,”模拟产生“一些新的但又比较靠谱的值来满足需求。(也可以用于预测数据)

2. 插值法
  • 概念

    • 插值函数
    • 插值
    • 插值法

    设函数 y = f ( x ) y = f(x) y=f(x) 在区间 [ a , b ] [a, b] [a,b] 上有定义,且已知在点 a ≤ x 0 < x 1 < ⋯ < x n ≤ b a \leq x_0 < x_1 < \dots < x_n \leq b ax0<x1<<xnb 上的值分别为: y 0 , y 1 , … , y n y_0, y_1, \dots, y_n y0,y1,,yn ,若存在一简单函数 P ( x ) P(x) P(x) ,使 P ( x i ) = y i ( i = 0 , 1 , 2 , … , n ) P(x_i) = y_i \quad (i = 0, 1, 2, \dots, n) P(xi)=yi(i=0,1,2,,n) , 则称 P ( x ) P(x) P(x) f ( x ) f(x) f(x)插值函数,点 x 0 , x 1 , … , x n x_0, x_1, \dots , x_n x0,x1,,xn 称为插值节点,包含插值节点的区间 [ a , b ] [a, b] [a,b] 称为插值区间,求插值函数 P ( x ) P(x) P(x) 的方法称为插值法

  • 分类

    • 分段插值 (常用)
    • 插值多项式
    • 三角插值
  • 龙格现象

    • 高次插值会产生龙格现象,即在两端出波动极大,产生明显的震荡。在不熟悉曲线运动趋势的前提下,不要轻易使用高次插值
  • 插值多项式的缺点

    • 插值多项式次数高,精度未必显著提高
    • 插值多项式次数越高,摄入误差可能显著增大

    (因为以上两个缺点,一般采用分段插值)

  • 常用的分段插值法

    • 分段三次埃尔米特插值
    • 三次样条插值
3. MATLAB代码

利用MATLAB的内置函数,实现简单的插值

  • (一维插值)代码

    % 产生一些样本点
    x = -pi:pi;
    y = sin(x);
    
    % 想要获得的新数据点的横坐标
    new_x = -pi:0.1:pi;
    
    % 利用内置函数 pchip,实现分段三次埃尔米特插值
    y1 = pchip(x,y, new_x);
    % 利用内置函数 spline,实现三次样条插值
    y2 = spline(x, y, new_x);
    
    % 利用plot函数绘制图像
    plot(x, y, 'go', new_x, y1, 'r-', new_x, y2, 'b-');
    % 利用legend函数实现标注
    legend('样本点', '三次埃尔米特插值', '三次样条插值', 'Location', 'SouthEast');
    
  • 运行结果
    在这里插入图片描述

  • (n维插值)代码

    % 产生一些样本点
    x1 = -3:3;
    x2 = -1:2;
    [x1,x2] = ndgrid(x1: x2);
    y = 1 + 2*x1 + 3*x2;
    
    % 想要获得的新数据点的横坐标
    new_x1 = -3:0.1:3;
    new_x2 = -2:0.1:2;
    [new_x1, new_x2] = ndgrid(new_x1, new_x2);
    
    % 利用内置函数 interpn,实现n维插值
    % 三次样条插值
    y1 = interpn(x1, x2, y, new_x1, new_x2, 'spline');
    
    % 利用plot函数绘制图像
    plot3(x1,x2, y, 'go', new_x1,new_x2, y1, 'r-');
    
  • 运行结果
    在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值