MATLAB中griddedInterpolant函数用法

devtools/2025/3/18 19:53:08/

目录

语法

说明

示例

一维插值

比较使用完整网格和网格向量的三维插值

使用默认网格进行插值

更精细的网格上的二维插值

一维外插

在同一网格上进行多组值插值


        griddedInterpolant函数的功能是实现网格数据插值。

语法

F = griddedInterpolant
F = griddedInterpolant(x,v)
F = griddedInterpolant(X1,X2,...,Xn,V)
F = griddedInterpolant(V)
F = griddedInterpolant(gridVecs,V)
F = griddedInterpolant(___,Method)
F = griddedInterpolant(___,Method,ExtrapolationMethod)

说明

        F = griddedInterpolant 创建一个空的网格数据插值对象。

        F = griddedInterpolant(x,v) 根据样本点向量 x 和对应的值 v 创建一维插值。

        F = griddedInterpolant(X1,X2,...,Xn,V) 使用作为一组 n 维数组 X1,X2,...,Xn 传递的样本点的完整网格创建二维、三维或 N 维插值。V 数组包含与 X1,X2,...,Xn 中的点位置关联的样本值。每个数组 X1,X2,...,Xn 的大小都必须与 V 相同。

        F = griddedInterpolant(V) 使用默认网格创建插值。使用此语法时,griddedInterpolant 将网格定义为第 i 维上间距为 1 且范围为 [1, size(V,i)] 的点集。如果希望节省内存且不在意点之间的绝对距离,则可使用此语法。

        F = griddedInterpolant(gridVecs,V) 指定一个元胞数组 gridVecs,它包含 n 个网格向量,描述一个 n 维样本点网格。在您要使用特定网格而且希望节省内存时可使用此语法。

        F = griddedInterpolant(___,Method) 指定插值方法:'linear'、'nearest'、'next'、'previous'、'pchip'、'cubic'、'makima' 或 'spline'。可以在上述任意语法中指定 Method 作为最后一个输入参数。

        F = griddedInterpolant(___,Method,ExtrapolationMethod) 指定内插和外插方法。当您的查询点位于样本点域之外时,griddedInterpolant 使用 ExtrapolationMethod 估计值。

        使用 griddedInterpolant 对一维、二维、三维或 N 维网格数据集进行插值。griddedInterpolant 返回给定数据集的插值 F。可以计算一组查询点(例如二维 (xq,yq))处的 F 值,以得出插入的值 vq = F(xq,yq)。

        使用 scatteredInterpolant 执行散点数据插值。

示例

一维插值

        使用 griddedInterpolant 进行一维数据集插值。

        创建一个由散点样本点组成的向量 v。这些点是在 0 到 20 之间的随机一维位置进行采样的点。

x = sort(20*rand(100,1));
v = besselj(0,x);

        为数据创建网格插值对象。默认情况下,griddedInterpolant 使用 'linear' 插值方法。

F = griddedInterpolant(x,v)
F = griddedInterpolant with properties:GridVectors: {[100x1 double]}Values: [100x1 double]Method: 'linear'ExtrapolationMethod: 'linear'

        查询 0 到 20 之间 500 个均匀间隔点处的插值 F。将插值结果 (xq,vq) 绘制在原始数据 (x,v) 之上。

xq = linspace(0,20,500);
vq = F(xq);
plot(x,v,'ro')
hold on
plot(xq,vq,'.')
legend('Sample Points','Interpolated Values')

如图所示:

比较使用完整网格和网格向量的三维插值

        使用这两种方法对三维数据插值以指定查询点。

        创建并绘制一个三维数据集,表示函数  范围内的一组网格样本点处计算的结果。

[x,y] = ndgrid(-5:0.8:5);
z = sin(x.^2 + y.^2) ./ (x.^2 + y.^2);
surf(x,y,z)

如图所示:

        为数据创建网格插值对象。

F = griddedInterpolant(x,y,z);

        使用更精细的网格查询插值并提高分辨率。

[xq,yq] = ndgrid(-5:0.1:5);
vq = F(xq,yq);
surf(xq,yq,vq)

如图所示:

        如果存在大量样本点或查询点,或者担心内存使用量太大,可以使用网格向量来提高内存使用率。

  • 如果您指定网格向量而不是使用 ndgrid 来创建完整网格,则 griddedInterpolant 可以避免为执行计算而生成完整的查询网格。

  • 传递网格向量时,它们通常一组为单位,就像元胞数组 {xg1, xg2, ..., xgn} 中的元胞一样。网格向量是表示完整网格数据点的紧凑方式。

        也可以使用网格向量执行上述命令。

x = -5:0.8:5;
y = x';
z = sin(x.^2 + y.^2) ./ (x.^2 + y.^2);
F = griddedInterpolant({x,y},z);
xq = -5:0.1:5;
yq = xq';
vq = F({xq,yq});
surf(xq,yq,vq)

如图所示:

使用默认网格进行插值

        使用默认网格对一组样本点执行快速插值。默认网格使用单一间距点,因此当样本点之间的精确 xy 间距不重要时,可以使用这种插值方法。

        创建一个样本函数值矩阵,然后绘制它们对默认网格的图。

x = (1:0.3:5)';
y = x';
V = cos(x) .* sin(y);
n = length(x);
surf(1:n,1:n,V)

如图所示:

        使用默认网格插人数据。

F = griddedInterpolant(V)
F = griddedInterpolant with properties:GridVectors: {[1 2 3 4 5 6 7 8 9 10 11 12 13 14]  [1 2 3 4 5 6 7 8 9 10 11 12 13 14]}Values: [14x14 double]Method: 'linear'ExtrapolationMethod: 'linear'

        查询插值并绘制结果。

[xq,yq] = ndgrid(1:0.2:n);
Vq = F(xq,yq);
surf(xq',yq',Vq)

        如图所示:

更精细的网格上的二维插值

        使用间距为 0.5 的完整网格进行粗略取样的数据插值。

        在两个维度中以完整网格形式定义范围为 [1, 10] 的样本点。

[X,Y] = ndgrid(1:10,1:10);

        在网格点处对 f(x,y)=x2+y2 进行采样。

V = X.^2 + Y.^2;

        创建指定三次插值的插值。

F = griddedInterpolant(X,Y,V,'cubic');

        使用 0.5 间距定义由查询点构成的完整网格并在这些点计算插值。然后,绘制结果。

[Xq,Yq] = ndgrid(1:0.5:10,1:0.5:10);
Vq = F(Xq,Yq);
mesh(Xq,Yq,Vq);

        如图所示:

一维外插

        使用 'pchip' 和 'nearest' 外插方法比较查询 F 的域外插值的结果。

        创建插值,并指定 'pchip' 作为内插方法,'nearest' 作为外插方法。

x = [1 2 3 4 5];
v = [12 16 31 10 6];
F = griddedInterpolant(x,v,'pchip','nearest')
F = griddedInterpolant with properties:GridVectors: {[1 2 3 4 5]}Values: [12 16 31 10 6]Method: 'pchip'ExtrapolationMethod: 'nearest'

        查询插值,并包括 F 的域外部的点。

xq = 0:0.1:6;
vq = F(xq);
figure
plot(x,v,'o',xq,vq,'-b');
legend ('v','vq')

如图所示:

        再次查询相同点的插值,这次使用 pchip 外插方法。

F.ExtrapolationMethod = 'pchip';
figure
vq = F(xq);
plot(x,v,'o',xq,vq,'-b');
legend ('v','vq')

如图所示:

在同一网格上进行多组值插值

        使用 griddedInterpolant 在相同的查询点上进行三组不同值插值。

        使用 −5≤X≤5 和 −3≤Y≤3 创建一个采样点网格。

gx = -5:5;
gy = -3:3;
[X,Y] = ndgrid(gx,gy);

        在查询点计算三个不同函数的值,然后将这些值串联成一个三维数组。V 的大小与前两个维度中的 X 和 Y 网格相同,但额外维度的大小反映与每个采样点相关联的值数目(在本例中为三个)。

f1 = X.^2 + Y.^2;
f2 = X.^3 + Y.^3;
f3 = X.^4 + Y.^4;
V = cat(3,f1,f2,f3);

        使用采样点和相关联的值创建插值。

F = griddedInterpolant(X,Y,V);

        创建一个查询点网格,其网格大小比采样点更细。

qx = -5:0.4:5;
qy = -3:0.4:3;
[XQ,YQ] = ndgrid(qx,qy);

        在查询点对所有三组值进行插值。

VQ = F(XQ,YQ);

        将原始数据与插值后的结果进行比较。

tiledlayout(3,2)
nexttile
surf(X,Y,f1)
title('f1')
nexttile
surf(XQ,YQ,VQ(:,:,1))
title('Interpolated f1')
nexttile
surf(X,Y,f2)
title('f2')
nexttile
surf(XQ,YQ,VQ(:,:,2))
title('Interpolated f2')
nexttile
surf(X,Y,f3)
title('f3')
nexttile
surf(XQ,YQ,VQ(:,:,3))
title('Interpolated f3')

如图所示:

提示

  • 计算一个 griddedInterpolant 对象 F 在多组不同查询点处的插值比分别使用 interp1、interp2、interp3 或 interpn 计算插值更快。例如:

    % Fast to create interpolant F and evaluate multiple times
    F = griddedInterpolant(X1,X2,V)
    v1 = F(Xq1)
    v2 = F(Xq2)% Slower to compute interpolations separately using interp2
    v1 = interp2(X1,X2,V,Xq1)
    v2 = interp2(X1,X2,V,Xq2)


http://www.ppmy.cn/devtools/168140.html

相关文章

vue3单独引用element-plus的Infinite Scroll无限滚动;vue3自定义指令

文章目录 1.正常单独使用element-plus其他功能组件2.引入类似与指令的插件3.自定义指令钩子 1.正常单独使用element-plus其他功能组件 引入即可使用 import { ElSelect, ElOption } from "element-plus"2.引入类似与指令的插件 需要先引入,再注册&…

【k8s002】k8s健康检查与故障诊断

k8s健康检查与故障诊断 ‌一、集群状态检查‌ ‌检查节点健康状态‌ kubectl get nodes -o wide # 查看节点状态及基本信息 kubectl describe node <node-name> # 分析节点详细事件&#xff08;如资源不足、网络异常&#xff09; kubectl top nodes …

OSPF与RIP联动实验

一、实验拓扑图 设计思路&#xff1a;划分了四个区域&#xff0c;配置好路由器接口IP地址后&#xff0c;首先使用OSPF实现全网互通。在R6上将会创建两个RIP&#xff0c;分别是RIP2和RIP22&#xff0c;在R7上创建一个RIP3&#xff0c;看其他路由器是否能够访问到R7的RIP路由表项…

算法练习5

今天这道题目主要是通过类来实现的&#xff0c;运用了运算符重载等相关知识。先写一个日期的类&#xff0c;然后根据每月的天数&#xff0c;将给出的n天进行减法&#xff0c;每减一次month&#xff0c;当month13时&#xff0c;month1,year,当n-当月的天数<0时&#xff0c;说…

冒泡排序:古老算法中的智慧启示

在计算机科学浩瀚的星空中&#xff0c;排序算法犹如璀璨的星辰&#xff0c;而冒泡排序恰似其中最朴实无华的一颗。这个诞生于计算机发展初期的经典算法&#xff0c;以其简单直观的逻辑原理&#xff0c;成为每个程序员启蒙阶段必经的试炼场。当我们凝视这个看似笨拙的排序方法时…

冯 • 诺依曼体系结构

冯 • 诺依曼体系结构 一、冯 • 诺依曼体系结构推导阶段 1&#xff1a;初始计算机体系结构&#xff08;仅输入、运算、输出&#xff09;阶段 2&#xff1a;加入控制功能&#xff0c;初步形成 CPU 概念阶段 3&#xff1a;性能瓶颈与引入内存阶段 4&#xff1a;最终冯诺依曼体系…

AI机器学习---开发工具JupyterLab

JupyterLab‌&#xff1a;JupyterLab是Jupyter项目的下一代交互式计算环境&#xff0c;提供了更加现代和灵活的用户界面。它支持多文档界面&#xff0c;用户可以同时打开和查看多个文档&#xff0c;包括笔记本、文本文件、代码文件等。JupyterLab的界面更加复杂&#xff0c;允许…

Redis--渐进式遍历

目录 一、引言 二、介绍 三、命令 四、总结 一、引言 本篇文章将介绍Redis中的渐进式遍历 二、介绍 一般使用keys * 来获取所有的key&#xff0c;但这样的操作如果数据量很大的时候&#xff0c;会将服务器给卡死&#xff0c;所以通过渐进式遍历&#xff0c;就会避免这个问题…