从零开始的数模(五)插值与拟合

news2024/11/27 8:36:02

目录

一、概念

二、 插值

2.1方法

2.2MATLAB实现

例题1

​编辑例题2

2.3python实现 

2.3.1例题一的python解法

 2.3.2二维网格节点插值

例题四

三、拟合篇:

3.1MATLAB实现

 3.2python实现


一、概念

二、 插值

2.1方法

 

2.2MATLAB实现

在MATLAB中提供了一些内置函数来实现插值,如interp1(一维插值)、intero2(二维插值)、interp3(三维插值)等等

一维插值使用方法:

例题1

x = 1:12;
y = [5 8 9 15 25 29 31 30 22 25 27 24];
xi = 1:0.01:12;
yi = interp1(x,y,xi,'spline');
plot(x,y,'*',xi,yi,'r')
xlabel('时间'),ylabel('温度')

 

二维插值使用方法:

例题2

 

%%绘制原图
 
x = 1:5;
y = 1:3;
wendu = [82 81 80 82 84;
         79 63 61 65 81;
         84 84 82 85 86];
%mesh(x,y,wendu)
 
%%开始插值
 
xi = 1:0.2:5;
yi = 1:0.2:3;
zi = interp2(x,y,wendu,xi',yi,'cubic');
mesh(xi,yi,zi)

 

2.3python实现 

Scipy.interpolate模块有一维插值函数interp1d,二维插值函数interp2d,多维插值函数interpn,interpnd
interp1d的基本调用格式为
interp1d(x,y,kind=“linear”),返回一个插值函数
kind的取值是字符串,指明插值方法通MATLANB

zero‘ ‘nearest’ :0阶梯插值,相当于0阶B样条曲线

‘slinear’‘linear’ :线性插值,相当于1阶B样条曲线

‘quadratic’‘cubic’:2阶和3阶B样条曲线,更高阶的曲线可以直接使用整数值来指定
 

2.3.1例题一的python解法

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d 
x=np.arange(0,25,2)
y=np.array([12, 9, 9, 10, 18, 24, 28, 27, 25, 20, 18, 15, 13])
xnew=np.linspace(0, 24, 500)  #插值点
f1=interp1d(x, y) #分段线性插值
y1=f1(xnew) #预测
f2=interp1d(x, y,'cubic') #三次样条插值
y2=f2(xnew) 
plt.rc('font',size=16); plt.rc('font',family='SimHei') #绘图中文文字输出
plt.subplot(121); plt.plot(xnew, y1); plt.xlabel("分段线性插值")
plt.subplot(122); plt.plot(xnew, y2); plt.xlabel("三次样条插值")
plt.show()

 2.3.2二维网格节点插值

例题三

import matplotlib.pyplot as plt
import numpy as np
from numpy.linalg import norm # np.linalg.norm 求范数
from scipy.interpolate import interp2d

z=np.loadtxt("data1_1.txt")  #导入数据
x=np.arange(0,1500,100)
y=np.arange(1200,-100,-100) #网格节点数据
f=interp2d(x, y, z, 'cubic') #双三次样条插值
xn=np.linspace(0,1400,141)
yn=np.linspace(0,1200,121) #插值节点
zn=f(xn, yn) #预测

#分块计算面积
m=len(xn); n=len(yn); s=0; 
for i in np.arange(m-1):
    for j in np.arange(n-1):
        p1=np.array([xn[i],yn[j],zn[j,i]])
        p2=np.array([xn[i+1],yn[j],zn[j,i+1]])
        p3=np.array([xn[i+1],yn[j+1],zn[j+1,i+1]])
        p4=np.array([xn[i],yn[j+1],zn[j+1,i]]) #网格四个顶点的 xyz 坐标向量
        #分别计算 $\Delta p1p2p3$ 与 $\Delta p1p4p3$ 的面积
        p12=norm(p1-p2); p23=norm(p3-p2) #算边长
        p13=norm(p3-p1) #公共边(对角线)
        p14=norm(p4-p1); p34=norm(p4-p3) #另一个三角形的另两边长
        L1=(p12+p23+p13)/2; s1=np.sqrt(L1*(L1-p12)*(L1-p23)*(L1-p13)) # $\Delta p1p2p3$ 的面积
        L2=(p13+p14+p34)/2; s2=np.sqrt(L2*(L2-p13)*(L2-p14)*(L2-p34)) # $\Delta p1p4p3$ 的面积
        s=s+s1+s2;   #求和
print("区域的面积为:", s)

plt.rc('font',size=16); plt.rc('text',usetex=True) # usetex=True
plt.subplot(121); contr=plt.contour(xn,yn,zn); plt.clabel(contr) #画等高线图
plt.xlabel('$x$'); plt.ylabel('$y$',rotation=90)
#画三维表面图
ax=plt.subplot(122,projection='3d'); 
X,Y=np.meshgrid(xn,yn) #构造网格节点
ax.plot_surface(X, Y, zn,cmap='viridis')
ax.set_xlabel('$x$'); ax.set_ylabel('$y$'); ax.set_zlabel('$z$')
plt.show()

 2.3.3二维散乱点插值 (griddata)

import scipy
f=scipy.interpolate.griddata(points, values, xi, method='linear', fill_value=nan, rescale=False)
#参数:
# points: 数据点坐标: (数据量为 n , 维数为 D )
#       具有形状 (n, D) 的浮点数的二维 ndarray,或具有形状 (n, ) 的长度 D 元组的一维 ndarray 
# values: 数据值: 浮点数或复数的ndarray,形状 (n, )
# xi: 插入数据的点: 
#       具有形状 (m, D) 的二维 ndarray 或长度为 D 元组可广播到相同形状的 ndarray 
# method: 插值方法: 可选 {‘linear’, ‘nearest’, ‘cubic’} 之一
#       ‘linear’: 分段线性, ‘nearest’: 最近邻点, ‘cubic’: 三次样条
# fill_value: 浮点数,可选,  
#       用于填充输入点凸包之外的请求点的值。如果未提供,则默认值为 NaN , 此选项对‘nearest’ 方法无效
# rescale: 布尔型,可选
#       在执行插值之前将点重新缩放到单位立方体 (如果某些输入维度具有不可比较的单位并且相差许多数量级时可以使用)
#返回: ndarray 插值数组

例题四

import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import griddata

x=np.array([129,140,103.5,88,185.5,195,105,157.5,107.5,77,81,162,162,117.5])
y=np.array([7.5,141.5,23,147,22.5,137.5,85.5,-6.5,-81,3,56.5,-66.5,84,-33.5])
z=-np.array([4,8,6,8,6,8,8,9,9,8,8,9,4,9])
xy=np.vstack([x,y]).T
xn=np.linspace(x.min(), x.max(), 100)
yn=np.linspace(y.min(), y.max(), 100) #生成插值点
xng, yng = np.meshgrid(xn,yn)  #构造网格节点
zn=griddata(xy, z, (xng, yng), method='nearest')  #最近邻点插值
plt.rc('font',size=16); plt.rc('text',usetex=True)
ax=plt.subplot(121,projection='3d')
ax.plot_surface(xng, yng, zn,cmap='viridis') #画地形图
ax.set_xlabel('$x$'); ax.set_ylabel('$y$'); ax.set_zlabel('$z$')
plt.subplot(122); c=plt.contour(xn,yn,zn,8); plt.clabel(c) #画等高线图
plt.show()

 

三、拟合篇:

3.1MATLAB实现


对于已给一批实测数据,由于实测方法、实验环境等一些外界因素的影响,不可避免地会产生随机干扰和误差。我们自然希望根据数据分布的总趋势去剔除观察数据中的偶然误差,这就是所谓的数据修匀(或称数据平滑)问题。

同样,在MATLAB中也存在着拟合函数的内置函数,如对多项式:进行拟和

可利用已有程序:a = ployfit(x,y,m)        注意:m为拟合多项式的次数

多项式在x出的值y可以用以下命令计算:y = ployval(a,x)

x = 0:0.1:1;
y = [-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
A = polyfit(x,y,2)   %A为拟合出来的函数
z = polyval(A,x);    %求多项式在x处的值z
plot(x,y,'k+',x,z,'r')

拟合结果

 3.2python实现

在这里插入图片描述

 在这里插入图片描述 

 在这里插入图片描述

在这里插入图片描述 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

带滤波器的PID控制仿真-2(M语言)

被控对象为三阶传递函数:低通滤波器为:采样时间为1ms,噪声信号加在对象的输出端。分三种情况进行:M1 时,为未加噪声信号;M2时,为加噪声信号未加滤波;M3时,为加噪声信号加滤波。阶跃响应结果如图1&#xff5…

【论文精读】KD-MVS

今天读的是发表在ECCV2022上的自监督MVS文章,作者来自于旷视科技和清华大学。 文章链接:arxiv 代码链接:https://github.com/megvii-research/KD-MVS 目录Abstract1. Introduction2. Related work3. Methodology3.1 Self-supervised Teacher …

51单片机七人多数表决器仿真设计( proteus仿真+程序+报告+讲解视频)

51单片机七人多数表决器仿真设计( proteus仿真程序报告讲解视频) 仿真图proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0033 51单片机七人多数表决器仿真设计视频讲解1.主要功能:2.仿真3.…

Java:Mybatis的使用

一、Mybatis的概述 MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发。 MyBatis中文官网:https://mybatis.org/mybatis-3/zh/getting-started.html 二、Mybatis快速入门 1、创建user表,添加数据 create database mybatis; use mybati…

英语语法大全

文章目录一、主语1、名词、代词和动词做主语2、主语从句做主语,谓语动词用单数3、主语从句练习二、谓语动词1、谓语动词种类2、主谓一致三、宾语1、单宾语2、双宾语3、复合宾语4、宾语从句四、定语1、定语从句2、定语从句的翻译五、状语1、分词做状语2、独立主格结构…

42.Isaac教程--超像素

超像素 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 超像素是一组外观相似的相连像素。 超像素分割将图像分成数百个不重叠的超像素(而不是数千或数百万个单独的像素)。通过使用超像素,您可以在更有意义的区…

ESP-C3入门2. Clion+IDF 开发环境搭建

ESP-C3入门2. ClionIDF 开发环境搭建一、准备工作二、Clion配置过程1. 使用idf.py命令创建一个范例工程2. 使用Clion打开项目,修改CMakeLists.txt3. 设置交叉编译工具链4. 设置CMake5. 对cmake一些路径进行修改。三、编译及烧录1. 编译2. 烧录3. 查看输出一、准备工…

审核中台业务数据进审升级之路

本文字数:3850字预计阅读时间:15 分钟目录1.背景1.1. 相关名词介绍1.2. 审核中台介绍1.3. 业务痛点介绍2. 规范化改造2.1 规范通讯协议2.2 规范处理流程3. 自动化改造3.1 业务接入检测器3.2 数据自动化流转3.3 源码示例4. 总结1.背景1.1 相关名词介绍1.1…

计算机图形学基础教程(Visual C++版)习题解答与编程实践(第2版)孔令德1-到第3章的直线扫描转换

1-到第3章的直线扫描转换(没更新完)习题1知识积累习题2知识点映射模式使用GDI对象习题3知识积累直线的中点Bresenham算法习题1 1.计算机图形学的定义是什么?说明计算机图形学、图像处理和模式识别之间的关系。 答: CG是计算机图形学的缩写。…

实验一、旅馆客户服务呼叫显示系统

实验一 旅馆客户服务呼叫显示系统 实验目的 综合应用数字电子技术知识,按照要求设计并完成一个小规模的数字电路系统。进行硬件线路的设计、仿真、焊接、调试与实现。使系统实现一种用于旅馆客户服务呼叫显示系统的实用电路。在呼叫过程中,当8位旅客有…

Spark Core ---- RDD持久化

RDD的数据是过程数据 RDD之间进行相互迭代计算(Transformation的转换),当执行开启后,新RDD的生成,代表老RDD的消失 RDD的数据是过程数据,只在处理的过程中存在,一旦处理完成,就不见…

【数据结构和算法】实现带头双向循环链表(最复杂的链表)

前文,我们实现了认识了链表这一结构,并实现了无头单向非循环链表,接下来我们实现另一种常用的链表结构,带头双向循环链表。如有仍不了解单向链表的,请看这一篇文章(7条消息) 【数据结构和算法】认识线性表中的链表&…

Spring Boot之SpringSecurity学习

文章目录一 SpringSecurity简介二 实战演示0. 环境 介绍1. 新建一个初始的springboot项目2. 导入thymeleaf依赖3. 导入静态资源4. 编写controller跳转5. 认证和授权6. 权限控制和注销7. 记住登录8. 定制登录页面三 完整代码3.1 pom配置文件3.2 RouterController.java3.3 Securi…

那些面试官口中常常提到b树(MySQL索引底层数据结构)

各种常见树1.树的基本概念2.二叉树3.b树4.b树5.b树与b树的对比5.MySQL索引底层数据结构1.树的基本概念 树的特点:有一个树根,树根上又有很多枝干,枝干上又有很多树枝,树枝上又有很多叶子 树最为一种数据结构也有相似特点 树是一个…

【计算机网络(考研版)】第二站:物理层(一)

前言 如下图所示,这是我们之前所说的数据流动示意图 我们将按照从下向上的结构进行学习。这一讲学习第一层物理层。物理层关注在一条通信信道上传输原始比特,即无论面对什么样的传输介质(有线或者无线)都可以传输比特流,物理层的作用正是要尽…

Python3 函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户…

Node require 正解

require 实现原理 流程概述 步骤1:尝试执行代码require("./1"). 开始调用方法require.步骤2:此时会得到filename,根据filename 会判断缓存中是否已经加载模块,如果加载完毕直接返回,反之继续执行步骤3&…

JavaScript 的数据类型

JavaScript 的数据类型 基本数据类型&#xff08;值类型&#xff09; Number&#xff08;包含小数、整数、负数、科学计数法&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"…

【Linux】六、Linux 基础IO(四)|动态库和静态库

目录 十一、动态库和静态库 11.1 动态库和静态库定义 11.2 动静态库的基本原理 11.3 静态库的打包与使用 11.3.1 静态库的打包 11.3.2 静态库的使用 11.4 动态库的打包与使用 11.4.1 动态库的打包 11.4.2 动态库的使用 11.5 动态库的加载 十一、动态库和静态库 11.1…

CB2-2CARD的openSUSE安装NAS环境配置

CB2-2CARD的openSUSE安装&NAS环境配置1. 简介2. 规格3. 系统安装3.1 Linux/Unix稳定镜像3.2 基础功能更新&安装3.2.1 更新源3.2.2 升级系统3.2.3 基础功能安装3.3 OpenSUSE系统情况3.3.1 源操作命令3.3.2 源镜像4. 需求 & 配置4.1 MiniDLNAStep 1&#xff1a;安装M…