数学建模-插值算法(Matlab)

article/2025/9/30 6:11:02

注意:代码文件仅供参考,一定不要直接用于自己的数模论文中
国赛对于论文的查重要求非常严格,代码雷同也算作抄袭
如何修改代码避免查重的方法:https://www.bilibili.com/video/av59423231   //清风数学建模

一、基础知识

简单来说是根据已知点进行线性数据预测,但数据太少需要通过数学方法生成一些数据,如根据十年人口数据预测未来五年人口增减情况。

1.两个常用的插值法

一般多用分段三次埃尔米特插值三次样条插值

其内置函数分别为

p=pchip(x,y,new_x)

x,y为已知样本点横纵坐标,new_x为要插入对应点的横坐标(纵坐标会计算生成,即为p)

三次样条插值函数参数也同理:

 p=spline(x,y,new_x)

2.生成和打印图片

脚本文件中生成图片(在同一个脚本文件里面,要想画多个图,需要给每个图编号,否则只会显示最后一个图)

figure(1) 

plot函数,显示图像,至少要两种点的横纵坐标,多种会生成更多线

线方式:-实线   :点线    -.虚点线   --波折线

点方式: .圆点   +加号   *型号   o小圆

颜色: y黄  r红  g绿  b蓝  k黑

标注使用legend函数,跟在figure、plot之后,一组x,y(即一种点)对应一个名称,最后选择注释所在图中的位置(如东南是右下角)

x = -pi:pi; y = sin(x); 
new_x = -pi:0.1:pi;
p = pchip(x,y,new_x);
figure(1); % 在同一个脚本文件里面,要想画多个图,需要给每个图编号,否则只会显示最后一个图哦~
plot(x, y, 'o', new_x, p, 'r-')
legend('样本点','三次埃尔米特插值','Location','SouthEast') 

 3.n维数据的插值

p=interpn(x1,x2,...,xn,y,new_x1,new_x2,...,new_xn,method)

 参数还是已知样本点的横纵坐标,new_x为要插入点的横坐标。最后method是调用方法,如下

'linear':线性插值(默认) 'cubic':三次插值

'spline':三次样条插值(多用) 'nearest':最邻近插值

 例:人口预测,给09-18年的人口,预测19-21年的

population=[133126,133770,134413,135069,135738,136427,137122,137866,138639, 139538];
year = 2009:2018;  %类似于等差数列,是09-18每个数值取整组成的矩阵
%可以加上 p1 = pchip(year, population, 2019:2021) 这样最后就是两条线了 
p2 = interpn(year, population, 2019:2021,'spline') %等价于p2 = spline(year, population, 2019:2021)
figure(4);
plot(year, population,'o',2019:2021,p2,'bx-')
legend('样本点','interpn三次样条插值预测','Location','SouthEast')

 二、实战演练

例题来源:第六届MathorCup大学生数学建模挑战A题 淡水养殖池塘水华发生及池水净化处理

 上图是附件二每个池子一些物质含量的变化,可以主要上沿,每个池子只有奇数周的数据,本演练是把1号池子的每周数据补充完整(即补上偶数周)

根据一号池的数据,把数据保存为Z(忽略叶绿体和汉字),如下图(可以另存为本地)

 多组数据图片的演示,可以for循环处理,同时要用到subplot(m,n,p)

m表示是图排成m行,n表示图排成n列.p表示图所在的位置,如p=1表示从左到右从上到下的第一个位置。

ylabel(ylab{i}) %给y轴标题,这里是直接引用元胞数组(先定义好的)中的字符串哦。

参考优秀代码(Mr.sandman同学提供):

x=Z(1,:); %Z的第一行是星期Z: 1     3     5     7     9    11    13    15
[n,m]=size(Z);%n为Z的行数,m为Z的列数
% 注意Matlab的数组中不能保存字符串,如果要生成字符串数组,就需要使用元胞数组,其用大括号{}定义和引用
ylab={'周数','轮虫','溶氧','COD','水温','PH值','盐度','透明度','总碱度','氯离子','透明度','生物量'};  % 等会要画的图形的标签
disp(['共有' num2str(n-1) '个指标要进行插值。'])
disp('正在对一号池三次埃尔米特插值,请等待')%一号池共有十一组要插值的数据,算上星期所在的第一行,共十二行
P=zeros(11,15);%对要储存数据的矩阵P赋予初值
for i=2:n%从第二行开始都是要进行插值的指标y=Z(i,:);%将每一行依次赋值给ynew_x=1:15;%要进行插值的xp1=pchip(x,y,new_x);%调用三次埃尔米特插值函数subplot(4,3,i-1);%将所有图依次变现在4*3的一幅大图上plot(x,y,'ro',new_x,p1,'-');%画出每次循环处理后的图像axis([0 15,-inf,inf])  %设置坐标轴的范围,这里设置横坐标轴0-15,纵坐标不变化%  xlabel('星期')%x轴标题ylabel(ylab{i})%y轴标题  这里是直接引用元胞数组中的字符串哦P(i-1,:)=p1;%将每次插值之后的结果保存在P矩阵中       
end
legend('原始数据','三次埃尔米特插值数据','Location','SouthEast')%加上标注,注意要手动在图中拖动标注到图片右下角哦
P = [1:15; P]  %把P的第一行加上周数

 矩阵P的数值即为要求的,可以粘贴回excel


http://chatgpt.dhexx.cn/article/r63hYUN3.shtml

相关文章

插值算法总结

1、最邻近元法 这是最简单的一种插值方法,不需要计算,在待求象素的四邻象素中,将距离待求象素最近的邻象素灰度赋给待求象素。设iu, jv(i, j为正整数, u, v为大于零小于1的小数,下同)为待求象素坐标,则待求…

插值算法基本原理

插值:数据处理的手段 将缺失数据补全处理 线性内插 拉格朗日插值法 牛顿插值 拟合:预测,寻找规律的手段 是插值的外延 插值算法:使用在现有的数据极少,不足以支撑分析的进行,这时就需要使用一些数学方法…

插值算法——分段线性插值(1)

首先,科普一下插值的含义:在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。 插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。 插…

Matlab实现常见的插值算法

本文介绍如何使用 Matlab 实现常见的插值算法:分段三次埃尔米特插值和三次样条插值。 分段三次埃尔米特插值 (1) pchip(x, y, new_x)函数表示分段三次埃尔米特插值,x表示已有的数据 点,y表示数据点代表的纵坐标值&am…

图像插值算法及其实现

sensor、codec、display device都是基于pixel的,高分辨率图像能呈现更多的detail,由于sensor制造和chip的限制,我们需要用到图像插值(scaler/resize)技术,这种方法代价小,使用方便。同时&#x…

插值算法(数学建模学习)

本系列参考清风老师的数学建模课程 插值算法 一、算法介绍 (一)算法引入 对于数据量少到不足以去分析问题,而必须生成一些合理的数据的情况要用到插值算法。 (二)算法详解 (1)定义 设函数 …

MATLAB-插值算法汇总

前言 数模比赛中常常需要对数据进行分析,当数据不足时就需要补充数据,所用到的方法就是插值法。本文汇总了一些常用的插值算法。 Hermite插值 埃尔米特插值(Hermite)会在给定的节点处,要求插值多项式的函数值与原函数值相同,同时…

第三讲 插值算法

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

opencv中插值算法详解

导读 做图像处理的同学应该经常都会用到图像的缩放,我们都知道图片存储的时候其实就是一个矩阵,所以在对图像进行缩放操作的时候,也就是在对矩阵进行操作,如果想要将图片放大,这里我们就需要用到过采样算法来扩大矩阵…

几种插值算法对比

1.拉格朗日插值 2.牛顿插值 3.分段线性插值 4. 分段三次埃尔米特插值 5.样条插值函数 6.五种样条函数比较 所以, 7. 五种插值方法的实际应用

转载:一文讲解图像插值算法原理

最近在研究插值算法,看到这篇CSDN博主Datawhale学习介绍的博文,觉得介绍得挺不错,转载过来。原文地址:https://blog.csdn.net/Datawhale/article/details/105697264 寄语:本文梳理了最近邻插值法、双线性插值法和三次…

插值算法

插值,通俗来说当在一个离散的事件中,想知道某一个位置确定的值时,就可以利用插值方式计算得到,即利用已知数据估计未知位置数值。插值的方式有很多,下面介绍几种常用的插值方式。 一、最近邻插值(Nearest Neighbour …

几种插值算法对比研究

[研究内容] 目前比较常用的几种插值算法 [正文] 目前比较常用的插值算法有这么几种:最邻近插值,双线性二次插值,三次插值, Lanczos插值等等,今天我们来对比一下这几种插值效果的优劣。 1,最邻近插值 最…

【3.0】 常见的插值算法

插值算法的概念一维插值问题一般插值多项式的原理拉格朗日插值法牛顿插值法埃尔米特插值法分段 三次埃尔米特插值和分段三次样条插值(常用,附代码) 一、插值算法的概念 数学建模比赛中,常常需要根据已知的函数点进行数据、模型的…

常用的三种插值算法

在做数字图像处理时,经常会碰到小数象素坐标的取值问题,这时就需要依据邻近象素的值来对该坐标进行插值。比如做图像的几何校正,也会碰到同样的问题。 1、最近邻插值法(Nearest Neighbour Interpolation) 这是最简单的…

数学建模常见算法:插值算法

目录 一、插值的定义 二、拉格朗日多项式插值(Lagrange插值) 三、龙格现象(Runge phenomenon) 四、牛顿插值(Newton) 五、分段线性插值 六、埃尔米特插值(Hermite 插值) 七、三次样条插值 八、插值…

图像处理之-----插值算法

插值算法是图像处理中最基本的算法,首先我们先了解一下什么是插值算法,以及插值算法在图像处理过程中的应用。 1、什么是插值 Interpolation is a method of constructing new data points within the range of a discrete set of known data points. …

操作系统 读者写者问题的实现(C++ 读者优先、写者优先)

通过信号量机制和相应的系统调用,用于线程的互斥和同步,实现读者写者问题。利用信号量机制,实现读者写者问题。 在windows 10环境下,创建一个控制台进程,此进程包含n个线程。用这n个线程来表示n个读者或写者。每个线程…

信号量机制实现读者写者问题(思路剖析+Java代码实现+验证)

写在前面: Java中: 我们用这样的代码新建一个信号量:Semaphore mutex new Semaphore(1);P操作(wait)的代码为:mutex.acquire();V操作(signal)的代码为:mutex.release(); 本文章的内容: 读者写者问题&#…

Java实现读者写者问题--读者优先

作者:凌杰林 简介 临界资源:同一时间只能由一个进程访问的资源 临界区:访问临界资源的代码段 读者写者问题:存在一个多个进程共享的数据区(临界资源),该数据区可以是一个文件或者一块内存空间…