数学建模之插值法及代码

2023-11-22 00:36
文章标签 代码 建模 数学 插值法

本文主要是介绍数学建模之插值法及代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

发现更多知识,欢迎访问Cr不是铬的个人网站

引言

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

插值法的定义

file


插值法的原理

file

file

拉格朗日插值法

说在前面,在数学建模比赛中,拉格朗日插值不好,有龙格现象。

不多做解释

file

分段插值

分段插值有分段线性插值,分段二次插值

分段插值在建模比赛中是比较常用到的。可以与后面的埃尔米特插值结合起来!

牛顿插值法

牛顿插值也有龙格现象!在数学建模还是用分段插值比较好

file

更苛刻的插值

Hermite插值

file

分段三次埃尔米特插值

分段三次埃尔米特插值很常用!

file

三次样条插值

file

关于这个具体详见代码部分,原理不作解释。

n维数据插值

file

代码部分

分段三次埃尔米插值法

%% 分段三次埃尔米插值法
x = -pi : pi;
y = sin(x);
%按间隔0.1来进行插值
new_x = -pi : 0.1 : pi;
%分段三次埃尔米插值
p = pchip(x,y,new_x);

绘图plot

%% 绘图plot
%plot的用法
%plot(x1,y1,x2,y2)
%线方式 -实线 :点线 -.虚点线 --虚线
%点方式 .圆点 +加号 *星号  x x型 o小圆
%颜色 y黄色 r红色 g绿色 b蓝色
%原始样本点
figure(1)
plot(x,y,'go')
%插值点
figure(2)
plot(new_x,p,'r-')

file

三次样条插值与分段三次埃尔米插值

%% 三次样条插值与分段三次埃尔米插值
x = -pi:pi;
y = sin(x);
new_x =-pi:0.1:pi;
p1 = pchip(x,y,new_x);
%三次样条插值
p2 = spline(x,y,new_x);%两种插值的对比
figure(3)
plot(x,y,'o',new_x,p1,'r-',new_x,p2,'b-')
legend('样本点','分段三次插值','三次样条插值','Location','southeast')
% 说明:
% LEGEND(string1,string2,string3, …)
% 分别将字符串1、字符串2、字符串3……标注到图中,每个字符串对应的图标为画图时的图标。
% ‘Location’用来指定标注显示的位置

file


关于人口预测的补充

插值法也可以用来预测,但是实际建模用得很少。

%%  人口预测(插值在实际建模中不用来预测)
population=[133126,133770,134413,135069,135738,136427,137122,137866,138639, 139538];
year = 2009:2018;
p1 = pchip(year,population,2019:2022);
p2 = spline(year,population,2019:2022);
plot(year,population,'ro',2019:2022,p1,'gx-',2019:2022,p2,'bx-')
legend('原始数据','分段三次埃尔米预测','三次样条预测',Location='southeast')

file

## 作业部分

file

对上述部分进行插值。

由于有很多种类别要进行插值,可以在循环中进行处理。

代码:

%% 读取数据
load Z.mat
%第一行的原始周期
x = Z(1,:);
%获取行与列
[n,m] = size(Z);
% 注意Matlab的数组中不能保存字符串,如果要生成字符串数组,就需要使用元胞数组,其用大括号{}定义和引用
ylab={'周数','轮虫','溶氧','COD','水温','PH值','盐度','透明度','总碱度','氯离子','透明度','生物量'};  % 等会要画的图形的标签
disp(['共有' num2str(n-1) '个指标要进行插值。'])
disp('正在对一号池三次埃尔米特插值,请等待')%一号池共有十一组要插值的数据,算上星期所在的第一行,共十二行
%初始化
P = zeros(11,15);
%% 循环插值for i = 2 : n%第二行之后都是要插值的%原始样本点y = Z(i,:);%要进行插值的xnew_x = 1:15;p1 = spline(x,y,new_x);subplot(4,3,i-1);%将所有图依次变现在4*3的一幅大图上plot(x,y,'o',new_x,p1,'r-');axis([0 15,-inf,inf])  %设置坐标轴的范围,这里设置横坐标轴0-15,纵坐标不变化xlabel('星期')%x轴标题ylabel(ylab{i})%y轴标题  这里是直接引用元胞数组中的字符串%保存结果P(i-1,:) = p1;end
legend('原始数据','三次样条插值结果','Location','southeast')
%加上第一行
P = [1:15;P];

本文由博客一文多发平台 OpenWrite 发布!

这篇关于数学建模之插值法及代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/406204

相关文章

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

Java强制转化示例代码详解

《Java强制转化示例代码详解》:本文主要介绍Java编程语言中的类型转换,包括基本类型之间的强制类型转换和引用类型的强制类型转换,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录引入基本类型强制转换1.数字之间2.数字字符之间引入引用类型的强制转换总结引入在Java编程语言中,类型转换(无论

Vue 调用摄像头扫描条码功能实现代码

《Vue调用摄像头扫描条码功能实现代码》本文介绍了如何使用Vue.js和jsQR库来实现调用摄像头并扫描条码的功能,通过安装依赖、获取摄像头视频流、解析条码等步骤,实现了从开始扫描到停止扫描的完整流... 目录实现步骤:代码实现1. 安装依赖2. vue 页面代码功能说明注意事项以下是一个基于 Vue.js

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom