MATLAB:插值函数之interp与griddata

2024-05-26 00:04

本文主要是介绍MATLAB:插值函数之interp与griddata,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MATLAB 提供了多种插值函数来处理不同维度的数据。其中,interp1、interp2 和 griddata 是常用的插值函数,分别用于一维、二维和多维(不规则)数据的插值

之前有对interp1进行过详细介绍,如需详细了解,请查看另一篇博客。

一、函数介绍

下面是这三个函数的用法和实际例子:

1.interp1

功能:对一维数据进行插值。

语法

vq = interp1(x, v, xq)
vq = interp1(x, v, xq, method)
vq = interp1(x, v, xq, method, extrapolation)

参数

  • x: 原始数据的 x 坐标向量。
  • v: 原始数据的值向量。
  • xq: 需要插值的查询点向量。
  • method: 插值方法(可选,默认为 'linear'),如 'linear'(线性插值)、 'nearest'(最近邻插值)、 'spline'(样条插值)等。
  • extrapolation: 外推方法(可选)。
x = 0:10;          % 原始数据点 x
v = sin(x);        % 原始数据的值
xq = 0:0.5:10;     % 查询点
vq = interp1(x, v, xq, 'spline'); % 使用'spline'方法进行插值% 绘图
plot(x, v, 'o', xq, vq, '-');
legend('原始数据', '插值数据');

 

2.interp2

功能:对二维数据进行插值。

语法

Vq = interp2(X, Y, V, Xq, Yq)
Vq = interp2(V, Xq, Yq)
Vq = interp2(..., method)

参数

  • XY: 原始数据的网格坐标矩阵(由 meshgrid 生成)。
  • V: 原始数据值的矩阵。
  • XqYq: 查询点的坐标矩阵。
  • method: 插值方法(可选),如 'linear''nearest''spline''cubic' 等。
[X, Y] = meshgrid(1:5, 1:5);       % 原始数据网格
V = peaks(5);                      % 原始数据值
[Xq, Yq] = meshgrid(1:0.1:5, 1:0.1:5); % 查询点
Vq = interp2(X, Y, V, Xq, Yq, 'cubic'); % 使用“cubic”插值% 绘图
mesh(Xq, Yq, Vq); 
hold on;
plot3(X, Y, V, 'o');  % 添加原始数据点

 

3.griddata

功能:对不规则数据进行插值,并生成规则网格上的插值值。

语法

Vq = griddata(x, y, v, xq, yq)
Vq = griddata(x, y, v, xq, yq, method)
x = rand(10, 1) * 10;       % 随机 x 坐标
y = rand(10, 1) * 10;       % 随机 y 坐标
v = sin(x) + cos(y);        % 原始数据值
[xq, yq] = meshgrid(0:0.1:10, 0:0.1:10); % 查询点网格
vq = griddata(x, y, v, xq, yq, 'cubic'); % 使用“cubic”插值% 绘图
mesh(xq, yq, vq); 
hold on;
plot3(x, y, v, 'o');  % 添加原始数据点

 

二、实践

请绘制电机效率MAP二维图。

题目说是二维图,是应该使用interp1进行插值吗?实际上,电机效率MAP是指电机的效率与转矩和转速的关系,将三维平面投影到了二维图,具体代码如下:

%% 绘制电机效率MAP二维图
clc
clear
% 定义原始数据
n = [300 300 700 700 700 900 900 900 1500 1500 3000 3000 4000 4000 5000 5000 6000 6000 7000 7000];
T = [138 50 328 138 50 328 138 50 138 50 138 50 50 30 50 30 50 30 40 30];
nt = [0.748 0.844 0.749 0.922 0.925 0.794 0.927 0.926 0.922 0.921 0.952 0.941 0.939 0.915 0.898 0.886 0.882 0.879 0.846 0.841];% 创建插值网格
n1 = linspace(300, 7000, 1000);  % 在300到7000之间生成1000个点的数组
T1 = linspace(30, 350, 1000);    % 在30到350之间生成1000个点的数组
[n1, T1] = meshgrid(n1, T1);     % 生成网格矩阵% 对原始数据进行插值以生成网格点上的效率数据
nt1 = griddata(n, T, nt, n1, T1);% 绘制插值后的伪彩色图
pcolor(n1, T1, nt1)
shading interp  % 插值方式显示伪彩色图,让颜色在相邻单元之间平滑过渡hold on  % 保持当前图形,允许在上面添加更多图形% 添加颜色条(色条)
colorbar% 绘制等高线图并设置等高线的数量
[C, h] = contourf(n1, T1, nt1, 7);% 设置x轴和y轴标签
xlabel("转速/(r/min)")
ylabel("转矩/N.m")% 手动添加等高线标签
clabel(C, h, 'manual')

请绘制电机效率MAP三维图 

%% 绘制电机效率MAP三维图
clc
clear
% 定义原始数据
n = [300 300 700 700 700 900 900 900 1500 1500 3000 3000 4000 4000 5000 5000 6000 6000 7000 7000];
T = [138 50 328 138 50 328 138 50 138 50 138 50 50 30 50 30 50 30 40 30];
nt = [0.748 0.844 0.749 0.922 0.925 0.794 0.927 0.926 0.922 0.921 0.952 0.941 0.939 0.915 0.898 0.886 0.882 0.879 0.846 0.841];% 创建插值网格
n1 = linspace(300, 7000, 50);  % 在300到7000之间生成1000个点的数组
T1 = linspace(30, 350, 50);    % 在30到350之间生成1000个点的数组
[n1, T1] = meshgrid(n1, T1);     % 生成网格矩阵% 对原始数据进行插值以生成网格点上的效率数据
nt1 = griddata(n, T, nt, n1, T1);mesh(n1, T1, nt1)
xlabel('转速/(r/min)')
ylabel('转矩/N.m')
zlabel('效率')

 

参考资料:《Matlab编程与汽车仿真应用》 ——崔胜民

这篇关于MATLAB:插值函数之interp与griddata的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http