【Matlab函数分析】对二维或三维散点数据插值函数scatteredInterpolant

🔗 运行环境:Matlab

🚩 撰写作者:左手の明天

🥇 精选专栏:《python》

🔥  推荐专栏:《算法研究》

#### 防伪水印——左手の明天 ####

💗 大家好🤗🤗🤗,我是左手の明天!好久不见💗

💗今天更新系列——对二维或三维散点数据插值函数scatteredInterpolant💗

📆  最近更新:2024 年 04 月 25 日,左手の明天的第 326 篇原创博客

📚 更新于专栏:matlab

#### 防伪水印——左手の明天 ####


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

目录

函数描述

输入参数

x, y, z — 样本点

P — 样本点数组

v — 样本点处的函数值

Method — 插值方法

ExtrapolationMethod — 外插方法

示例

二维插值

三维插值

替代样本值

比较散点数据的插值方法

在查询点进行多组值插值


函数描述

F = scatteredInterpolant 创建一个空的散点数据插值对象。

F = scatteredInterpolant(x,y,v) 创建一个拟合 v = F(x,y) 形式的曲面的插值。向量 x 和 y 指定样本点的 (x,y) 坐标。v 包含与点 (x,y) 关联的样本值。

F = scatteredInterpolant(x,y,z,v) 创建一个 v = F(x,y,z) 形式的三维插值。

F = scatteredInterpolant(P,v) 以数组形式指定样本点坐标。P 的行包含 v 中值的 (x, y) 或 (x, y, z) 坐标。

F = scatteredInterpolant(___,Method) 指定插值方法:'nearest''linear' 或 'natural'。在前三个语法中的任意一个中指定 Method 作为最后一个输入参量。

F = scatteredInterpolant(___,​​​​​​​Method,​​​​​​​ExtrapolationMethod) 指定内插和外插方法。在前三个语法的任意一个中同时传递 Method 和 ExtrapolationMethod 作为最后两个输入参量。

  • Method 可以是 'nearest''linear' 或 'natural'

  • ExtrapolationMethod 可以是 'nearest''linear' 或 'none'


输入参数

xyz — 样本点

样本点,指定为列向量,其行数与 v 相同。样本点应该是唯一的。但是,如果样本点包含重复项,scatteredInterpolant 将显示警告并将重复项合并为单个点。

P — 样本点数组

样本点数组,指定为 m×n 的矩阵,其中 m 是点数,n 是这些点所在空间的维度。P 的各行包含样本点的 (x, y) 或 (x, y, z) 坐标。样本点应该是唯一的。

v — 样本点处的函数值

样本点处的函数值,指定为向量或矩阵。对于二维数据,v = F(x,y)。对于三维数据,v = F(x,y,z)。

  • 要使用一组值进行插值,请将 v 指定为向量,其中行数与样本点数相同。

  • 要使用多组值进行插值,请将 v 指定为矩阵,其中行数与样本点数相同。v 中的每列表示不同函数在样本点的值。例如,如果 x 和 y 是包含 10 个元素的列向量,则可以将 v 指定为 10×4 矩阵以使用四组不同值进行插值。

Method — 插值方法

插值方法,指定为下列选项之一。

方法描述连续性
'linear'(默认值)

线性插值

C0
'nearest'

最近邻点插值

不连续
'natural'

自然邻点插值

C1(样本点处除外)

ExtrapolationMethod — 外插方法

外插法,指定为下列选项之一。

ExtrapolationMethod描述
'linear'

基于边界梯度的线性外插。Method 为 'linear' 或 'natural' 时的默认值。

'nearest'

最近邻点外插。此方法的计算结果为最近邻点的值。Method 为 'nearest' 时的默认值。

'none'

无外插。Points 凸包之外的任何查询返回 NaN


示例

二维插值

定义一些样本点,并计算这些位置的三角函数的值。这些点是用于插值的样本值。

t = linspace(3/4*pi,2*pi,50)';
x = [3*cos(t); 2*cos(t); 0.7*cos(t)];
y = [3*sin(t); 2*sin(t); 0.7*sin(t)];
v = repelem([-0.5; 1.5; 2],length(t));

创建插值。

F = scatteredInterpolant(x,y,v);

计算位于查询位置 (xqyq) 处的插值。

tq = linspace(3/4*pi+0.2,2*pi-0.2,40)';
xq = [2.8*cos(tq); 1.7*cos(tq); cos(tq)];
yq = [2.8*sin(tq); 1.7*sin(tq); sin(tq)];
vq = F(xq,yq);

绘制结果。

plot3(x,y,v,'.',xq,yq,vq,'.'), grid on
title('Linear Interpolation')
xlabel('x'), ylabel('y'), zlabel('Values')
legend('Sample data','Interpolated query data','Location','Best')

三维插值

为一组散点样本点创建插值,然后计算一组三维查询点处的插值。

定义 200 个随机点并对三角函数采样。这些点是用于插值的样本值。

rng default;
P = -2.5 + 5*rand([200 3]);
v = sin(P(:,1).^2 + P(:,2).^2 + P(:,3).^2)./(P(:,1).^2+P(:,2).^2+P(:,3).^2);

创建插值。

F = scatteredInterpolant(P,v);

计算位于查询位置 (xq,yq,zq) 处的插值。

[xq,yq,zq] = meshgrid(-2:0.25:2);
vq = F(xq,yq,zq);

绘制结果的切片。

xslice = [-.5,1,2]; 
yslice = [0,2]; 
zslice = [-2,0];
slice(xq,yq,zq,vq,xslice,yslice,zslice)

 

替代样本值

在需要更改位于样本点处的值时替换 Values 属性中的元素。由于原始三角剖分没有改变,因此在计算新插值时可立即获得结果。

创建 50 个随机点并对指数函数进行采样。这些点是用于插值的样本值。

rng('default')
x = -2.5 + 5*rand([50 1]);
y = -2.5 + 5*rand([50 1]);
v = x.*exp(-x.^2-y.^2);

创建插值。

F = scatteredInterpolant(x,y,v)
F = scatteredInterpolant with properties:Points: [50x2 double]Values: [50x1 double]Method: 'linear'ExtrapolationMethod: 'linear'

在 (1.40,1.90) 处计算插值。

F(1.40,1.90)
ans = 0.0069

更改插值样本值,并重新计算同一点处的插值。

vnew = x.^2 + y.^2;
F.Values = vnew;
F(1.40,1.90)
ans = 5.6491

比较散点数据的插值方法

比较 scatteredInterpolant 提供的几种不同插值算法的结果。

创建包含 50 个散点的样本数据集。这里有意使用较少的点数量,目的是为了突出插值方法之间的差异。

x = -3 + 6*rand(50,1);
y = -3 + 6*rand(50,1);
v = sin(x).^4 .* cos(y);

创建插值和查询点网格。

F = scatteredInterpolant(x,y,v);
[xq,yq] = meshgrid(-3:0.1:3);

使用 'nearest''linear' 和 'natural' 方法绘制结果图。每当插值方法更改时,都需要重新查询插值以获取更新后的结果。

F.Method = 'nearest';
vq1 = F(xq,yq);
plot3(x,y,v,'mo')
hold on
mesh(xq,yq,vq1)
title('Nearest Neighbor')
legend('Sample Points','Interpolated Surface','Location','NorthWest')

F.Method = 'linear';
vq2 = F(xq,yq);
figure
plot3(x,y,v,'mo')
hold on
mesh(xq,yq,vq2)
title('Linear')
legend('Sample Points','Interpolated Surface','Location','NorthWest')

F.Method = 'natural';
vq3 = F(xq,yq);
figure
plot3(x,y,v,'mo')
hold on
mesh(xq,yq,vq3)
title('Natural Neighbor')
legend('Sample Points','Interpolated Surface','Location','NorthWest')

绘制精确解。

figure
plot3(x,y,v,'mo')
hold on
mesh(xq,yq,sin(xq).^4 .* cos(yq))
title('Exact Solution')
legend('Sample Points','Exact Surface','Location','NorthWest')

在查询点进行多组值插值

在相同的查询点对多个数据集进行插值。

创建一个包含 50 个散点的样本数据集,由样本点向量 x 和 y 表示。

rng("default")
x = -3 + 6*rand(50,1);
y = -3 + 6*rand(50,1);

要对多个数据集进行插值,请创建一个矩阵,其中每列表示不同函数在样本点的值。

s1 = sin(x).^4 .* cos(y);
s2 = sin(x) + cos(y);
s3 = x + y;
s4 = x.^2 + y;
v = [s1 s2 s3 s4];

创建查询点向量,指示为 v 中的每组值执行插值的位置。

xq = -3:0.1:3;
yq = -3:0.1:3;

创建插值 F

F = scatteredInterpolant(x,y,v)
F = scatteredInterpolant with properties:Points: [50x2 double]Values: [50x4 double]Method: 'linear'ExtrapolationMethod: 'linear'

计算位于查询位置的插值。Vq 的每页都包含 v 中对应数据集的插值。

Vq = F({xq,yq});
size(Vq)
ans = 1×361    61     4

绘制每个数据集的插值。

tiledlayout(2,2)
nexttile
plot3(x,y,v(:,1),'mo')
hold on
mesh(xq,yq,Vq(:,:,1)')
title("sin(x).^4 .* cos(y)")nexttile
plot3(x,y,v(:,2),'mo')
hold on
mesh(xq,yq,Vq(:,:,2)')
title("sin(x) + cos(y)")nexttile
plot3(x,y,v(:,3),'mo')
hold on
mesh(xq,yq,Vq(:,:,3)')
title("x + y")nexttile
plot3(x,y,v(:,4),'mo')
hold on
mesh(xq,yq,Vq(:,:,4)')
title("x.^2 + y")lg = legend("Sample Points","Interpolated Surface");
lg.Layout.Tile = "north";

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何替代传统的方式,提高能源企业敏感文件传输的安全性?

能源行业是一个关键的基础设施领域,它涉及能源的勘探、开采、生产、转换、分配和消费。随着全球经济的发展和人口的增长,能源需求持续上升,这对能源行业的可持续发展提出了挑战。能源行业的传输场景多种多样,需要重点关注能源企业…

【优质书籍推荐】ChatGLM3大模型本地化部署、应用开发与微调

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

01.Kafka简介与基本概念介绍

1 Kafka 简介 Kafka 是最初由 Linkedin公司开发,是一个分布式、支持分区(partition)的、多副本(replica)的,基于 Zookeeper 协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于 hadoop 的…

vue快速入门(四十三)axios模块的安装与引入

步骤很详细,直接上教程 上一篇 在项目目录打开终端 输入以下命令安装axios npm i axios重新打开项目即可完成按照 测试 源码 main.js import Vue from vue import App from ./App.vue//全局引入axios // 引入axios import axios from axios; // 挂载到vue原型…

【Java EE】 文件IO的使用以及流操作

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

从零开始安装 stable diffusion webui v1.9.3 (windows10)

从零开始安装 stable diffusion webui v1.9.3 (windows10) CUDA 安装 CUDA 12.1 | https://developer.nvidia.com/cuda-toolkit-archive CUDNN 8.x | https://developer.nvidia.com/rdp/cudnn-archive 安装路径 F:/CUDA/v12.1 安装git git官网 | https://git-scm.com/ 安…

python--使用pika库操作rabbitmq实现需求

Author: wencoo Blog:https://wencoo.blog.csdn.net/ Date: 22/04/2024 Email: jianwen056aliyun.com Wechat:wencoo824 QQ:1419440391 Details:文章目录 目录正文 或 背景pika链接mqpika指定消费数量pika自动消费实现pika获取队列任务数量pi…

广工电工与电子技术实验报告-8路彩灯循环控制电路

实验代码 module LED_water (clk,led); input clk; output [7:0] led; reg [7:0] led; integer p; reg clk_1Hz; reg [7:0] current_state, next_state; always (posedge clk) begin if(p25000000-1)begin …

C# Web控件与数据感应之 ListControl 类

目录 关于数据感应 ListControl 类类型控件 范例运行环境 数据感应通用方法 设计 实现 调用示例 数据源 调用 小结 关于数据感应 数据感应也即数据捆绑,是一种动态的,Web控件与数据源之间的交互,诸如 System.Web.UI.WebControls 里…

MySQL库表占用空间排序

在进行数据库备份恢复时,经常会碰到耗时很长的问题。大概率是因为某些库表的占用空间太大。 以下语句按照库表占用空间大小,进行降序排序: SELECT table_schema AS Database,table_name AS Table,ROUND((data_length index_length) / 1024…

swiper使用方法?

组件 首先 recat -vant组件 带小点点的 可以实现跳转的一个效果 import { Swiper } from react-vant; 每个 Swiper.Item 代表一张轮播卡片,可以通过 autoplay 属性设置自动轮播的间隔。 import React from react; import { Swiper } from react-vant; import { i…

SpringBoot+layuimini实现左侧菜单动态展示

layuimini左侧菜单动态显示 首先我们看一下layuimini的原有菜单显示格式 {"homeInfo": {"title": "首页","href": "page/welcome-2.html?t2"},"logoInfo": {"title": "LAYUI MINI","…

软件工程物联网方向嵌入式系统复习笔记--嵌入式系统硬件平台

2 嵌入式系统硬件平台 2.1 嵌入式系统硬件平台概述 2.1.1 整体构架 台式计算机硬件平台整体构架 嵌入式系统硬件平台整体构架 作业:看门狗和实时时钟是什么? 看门狗(Watchdog) 我的理解: 概念:看门狗实…

阿斯达年代记三强争霸服务器没反应 安装中发生错误的解决方法

阿斯达年代记三强争霸服务器没反应 安装中发生错误的解决方法 最近刚上线的由影视剧改编的游戏《阿斯达年代记三强争霸》可谓是在游戏圈内引起了轩然大波,这是一款由网石集团与龙工作室联合开发的MMORPG游戏,游戏背景设定在一个名为阿斯大陆的区域&…

Qt 6 开源版(免费) -- 安装图解

Qt6起,两项重大改变(并非指技术): 必须在线安装,不再提供单独的安装包主推收费的商业版 当然的,为了引流、培养市场,提供了一个免费的开源版本。 开源版相对于收费的商业版,主体是…

Spark RDD的分区与依赖关系

Spark RDD的分区与依赖关系 RDD分区 RDD,Resiliennt Distributed Datasets,弹性式分布式数据集,是由若干个分区构成的,那么这每一个分区中的数据又是如何产生的呢?这就是RDD分区策略所要解决的问题,下面我…

C语言基础:初识指针(二)

当你不知道指针变量初始化什么时,可以初始化为空指针 int *pNULL; 我们看NULL的定义,可以看出NULL是0被强制转化为Void* 类型的0;实质还是个0; 如何避免野指针: 1. 指针初始化 2. 小心指针越界 3. 指针指向空间…

springboot笔记一:idea社区版本创建springboot项目的方式

社区idea 手动maven 创建springboot项目 创建之后修改pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sc…

苹果发布开源模型;盘古大模型5.0将亮相;英伟达将收购 Run:ai

苹果首次发布开源语言模型 近期&#xff0c;苹果在 Hugging Face 发布了 OpenELM 系列模型。OpenELM 的关键创新是逐层扩展策略&#xff0c;该策略可在 transformer 模型的每一层中有效地分配参数&#xff0c;从而提高准确性。 与具有统一参数分配的传统语言模型不同&#xff…

elasticsearch-8.1.0安装记录

目录 零、版本说明一、安装二、使用客户端访问 零、版本说明 centos [rootnode1 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)elasticsearch elasticsearch-8.1.0-linux-x86_64一、安装 systemctl stop firewalld.servicesystemctl disable firewal…