插值模型

  1. 概述
    实际生活中,我们会使用各种各样的函数。对于y=exp(sinx)等难以计算、比较复杂的函数,我们希望找到一个近似的替代函数来方便计算y的粗略值。我们需要用一个比较简单的函数y=y(x)来近似代替数据,或近似代替函数y=f(x),使得:y(xi) = f(xi),i = 0,1,2,…,n,称y=y(x)为函数y=f(x)在点x0,x1,…,xn处的插值函数。

  2. 插值法的基本原理
    求过已知有限个数据点(插值节点)的近似函数(插值函数)。

  3. 插值模型
    1)范围:当数据量不足,需要补充,且认定已有数据可信时,通常利用函数插值方法建立插值模型。
    2)目标:根据一组观测数据寻找函数关系。
    3)具体方法

3.1 一维插值

3.1 线性模型
3.2 插值法的分类
a,若$P(x)$是次数不超过n的代数多项式,即$P(x)=a_{0}+a_{1}x+...+a_{n}x$
b,若$P(x)$是分段多项式,就成为分段插值
c,若$P(x)$是三角多项式,就成为三角插值,


function y = lagrange(x0,y0,x)
ii = 1:length(x0);
y = zeros(size(x));
for i = iiij = find(ii~=i); yi = 1;for j=1:length(ij), y1 = y1.*(x-x0(ij(j)));endy = y+y1*y0(i)/prod(x0(i)-x0(ij));
end
注意:

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

3.2分段线性插值模型

作用:提高插值精度
概念:给出x,在与之相邻的两点之间构造函数,寻找
分段二次插值:选取跟节点x最近的三个节点 x i − 1 , x i , x i + 1 x_{i-1},x_{i},x_{i+1} xi−1​,xi​,xi+1​进行二次插值,即在每一个区间 [ x i − 1 , x i + 1 ] [x_{i-1},x_{i+1}] [xi−1​,xi+1​]上,取:
f ( x ) f(x) f(x) ≈ \approx ≈ L 2 ( x ) = L_{2}(x)= L2​(x)= ∑ k = i − 1 i + 1 \sum_{k=i-1}^{i+1} ∑k=i−1i+1​
φ \varphi φ ( x ) (x) (x) = ∑ i = 0 n \sum_{i=0}^n ∑i=0n​ y i y_{i} yi​ l i l_{i} li​ ( x ) (x) (x),其中

3.3 Lagarange插值(抛物插值、二次插值)

对给定的n个插值点x1,x2,⋯,xnx1,x2,⋯,xn及对应的函数值y1,y2,⋯,yny1,y2,⋯,yn,利用构造的n-1次Lagrange插值多项式,则对插值区间内任意x的函数值y可通过下式求的:
互异的三点联立得到带入模型: P ( x ) P(x) P(x) = a 2 x 2 a_{2}x{^2} a2​x2 + a 1 x a_{1}x a1​x + a 0 a_{0} a0​
几何意义:

化简后得到的插值函数:

function y = lagrange(x0,y0,x)
ii = 1:length(x0);
y = zeros(size(x));
for i = iiij = find(ii~=i); yi = 1;for j=1:length(ij), y1 = y1.*(x-x0(ij(j)));endy = y+y1*y0(i)/prod(x0(i)-x0(ij));
end

例一:给出f(x)=ln(x)的数值表,用Lagrange计算ln(0.54)的近似值。

>> x=[0.4:0.1:0.8];
>> y=[-0.916291,-0.693147,-0.510826,-0.356675,-0.223144];
>> lagrange(x,y,[0.54,0.55,0.78])
ans =-0.6161   -0.5978   -0.2484

3.4 分段三次(Hermite)插值
许多实际问题不但要求插值函数j(x)在插值节点处与被插函数f(x)有相同的函数值j(xi)=f(xi) (i=0,1,2,…,n), 而且要求在有些节点或全部节点上与f(x)的导数值也相等,甚至要求高阶导数值也相等,能满足这种要求的插值问题就称为Hermite插值。

Hermite插值公式:


MATLAB实现:

hermite.m
function y=hermite(x0,y0,y1,x)
n=length(x0);  m=length(x);
for k=1:m    yy=0.0;for i=1:n        h=1.0;  a=0.0;for j=1:nif j~=ih=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2;a=1/(x0(i)-x0(j))+a;endendyy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i));endy(k)=yy;
end

例二:对给定数据,试构造Hermite多项式求出sin0.34的近似值。

>> x0=[0.3,0.32,0.35];
>> y0=[0.29552,0.31457,0.34290];
>> y1=[0.95534,0.94924,0.93937];
>> y=hermite(x0,y0,y1,0.34)
y =0.3335
>> sin(0.34)               %与精确值比较
ans =0.3335

例3:

>> x=[0.3:0.005:0.35];
>>y=hermite(x0,y0,y1,x);>> plot(x,y)>> y2=sin(x);
>>hold on>> plot(x,y2,'--r')

3.5 n维数据的插值

p = interpn(x1,x2,…,xn,y,new_x1,new_x2,…,new_xn,method)
%x1,x2,…,xn是已知样本点的横坐标
%y是已知样本点的纵坐标
%method是要插值的方法
%'linear’线性插值(默认算法)
%‘cubic’:三次插值
%‘spline’:三次样条插值法(最为精准)
%‘nearest’:最邻近插值算法

% n维数据插值
x = -pi:pi;y = sin(x);
new_x = -pi:0.1:pi;
p = spline(x,y,new_x);
%等价于p = interpn(x,y,new_x,'spline');
figure(3);
plot(x,y,'o',new_x,p,'r-')
%线方式: -实线  :点线 -.虚点线 --波点线
%点方式:.圆点 +加号 *星号 x x形 o小圆
%颜色: y黄 r红 g绿 b蓝 w白 k黑 m紫 c青

例子:

%人口预测
population=[133126,133770,1224413,135069,135738,136427,137122,137866,138639,139538];
year = 2009:2018;
p1 = pchip(year,population,2019:2021)%分段三次埃尔米特插值预测
p2 = spline(year,population,2019:2021)%三系样条插值预测
figure(4);%对图进行命名
plot(year,population,'o',2019:2021,p1,'r*-',2019:2021,p2,'bx-')
legend('样本点','三次埃尔米特插值预测','三次样条插值预测','SouthEast')

【数学建模】(3)插值模型 精解+代码相关推荐

  1. 数学建模之差分方程模型详解

    码字总结不易,老铁们来个三连:点赞.关注.评论 作者:[左手の明天]  原创不易,转载请联系作者并注明出处 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链 ...

  2. 数学建模之稳定性模型详解

    码字总结不易,老铁们来个三连:点赞.关注.评论 作者:[左手の明天]  原创不易,转载请联系作者并注明出处 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链 ...

  3. 写5个数学建模的经典模型案例和代码

    1.线性规划模型案例:生产计划 假设一家工厂生产两种产品A和B,每个月有100个工作日,每个工作日可以生产200个A产品或150个B产品.A产品售价为200元/个,B产品售价为300元/个,每个月至少 ...

  4. 数学建模——逻辑回归模型Python代码

    数学建模--逻辑回归模型详解Python代码 程序用到的测试数据: 链接:https://pan.baidu.com/s/1LGD1MAxk2lxO93smSPNyZg 提取码:uukr 代码正文 i ...

  5. 数学建模——一维、二维插值模型详解Python代码

    数学建模--一维.二维插值模型详解Python代码 一.一维插值 # -*-coding:utf-8 -*- import numpy as np from scipy import interpol ...

  6. 数学建模——TOPSIS综合评价模型Python代码

    数学建模--TOPSIS综合评价模型Python代码 正常代码 import numpy as np # 导入numpy包并将其命名为np ##定义正向化的函数 def positivization( ...

  7. 数学建模基本算法模型Chapter1--线性规划

    数学建模基本算法模型Charpter1–线性规划(LP) By 进栈需检票 一.线性规划基本概念 1.Linear Programming (LP问题) 列出方程组不等式求解(基本形式) 包含目标函数 ...

  8. 常染色体的隐性疾病数学建模(代数模型)

    常染色体的隐性疾病数学建模(代数模型) 摘要:本文研究随交配代数的增长,常染色体隐性疾病的基因分布变化问题.使用代数模型,在正常人不与显性患者交配,但隐性患者可与正常人.隐性患者交配的情况下时,探究基 ...

  9. 【数学建模】灰色关联(Matlab代码实现)

    目录 1 灰色关联理论 2 算例及Matlab代码实现 2.1 算例1 2.2 算例2   2.3 算例3 2.4 算例4  3 写在最后 1 灰色关联理论 灰色关联分析l是由邓聚龙教授于1982年提 ...

最新文章

  1. 初学ssm框架的信息
  2. 脏读、幻读和不可重复读 + 事务隔离级别
  3. IP、TCP、UDP、HTTP头部信息
  4. uboot主Makefile分析
  5. CreateJS基础 学习笔记(上)
  6. 2021年财富世界500强,苹果是全球最赚钱公司,小米第338位,第一是它
  7. 一个德国设计奖,怎么就成了中国品牌的财富密码
  8. uploadify 火狐不兼容问题解决方案
  9. 安装docker和jupyter采坑历程
  10. 基于MATLAB语音信号的处理与滤波
  11. 细粒度情感分析在到餐场景中的应用
  12. Windows常见键盘操作快捷键
  13. unity3d如何有效地组织代码?
  14. mysql 1236错误_mysql报1236错误代码该如何解决
  15. 妖人柴:快速拥有一个赚钱的adsense账号终极秘密
  16. 厦门大学计算机英语考试,【图片】一战厦大计算机上岸,经验帖。慢更【考研吧】_百度贴吧...
  17. 关于转行产品经理的十大顾虑《上》
  18. 晶体三极管放大电路的基础
  19. 郑轻校园网工具1.0正式版本首发
  20. 计算n阶乘中尾部零的个数

热门文章

  1. 建筑的永恒之道----道之核心
  2. 运算放大器节点电压方程_高速放大器设计三大常见问题,TI 帮您攻克!
  3. 微软确认收购SwiftKey 与自家Word Flow整合
  4. Request header is too large错误
  5. 神经网络算法识别图像,图像识别神经网络算法
  6. 应用商店调研-百度手机助手
  7. 凌云库存管理系统的几点使用心得
  8. 广工计算机网络课程设计FTP服务器,计算机网络-课程设计报告(FTP客户端的设计和实现).doc...
  9. VBA多个WORD文档表格数据写入到EXCEL中
  10. 电脑没有声音,任务栏声音图标不见了,怎么办?