数学建模之插值法及代码

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

相关文章

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

uva 11044 Searching for Nessy(小学数学)

题意是给出一个n*m的格子,求出里面有多少个不重合的九宫格。 (rows / 3) * (columns / 3) K.o 代码: #include <stdio.h>int main(){int ncase;scanf("%d", &ncase);while (ncase--){int rows, columns;scanf("%d%d", &rows, &col

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip