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

news2024/11/19 23:21:13

🔗 运行环境: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×3

    61    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.coloradmin.cn/o/1624413.html

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

相关文章

6.MMD ray渲染 材质的添加及打光方法

材质 前置准备 先准备好模型和场景 将ray控制器拖入进去 添加完默认的材质以后的效果 打开插入材质页面 打开MaterialMap栏 将流萤的模型展开 自发光 现在给领带添加一个自发光效果 在自发光Emissive里,打开x1,选择albedo,白光 现在…

为什么要分库分表?(设计高并发系统的时候,数据库层面该如何设计?)

目录 1.分表 2.分库 说白了,分库分表是两回事儿,大家可别搞混了,可能是光分库不分表,也可能是光分表不分库,都有可能。 我先给大家抛出来一个场景。 假如我们现在是一个小创业公司(或者是一个 BAT …

用Python和Pygame实现简单贪吃蛇游戏

1.pip安装pygame pygam插件安装 pip install 插件名字 # 安装 pip uninstall 插件名字 # 卸载 pip install 插件名字 -i 指定下载的镜像网址 pip show 插件名字 # 查看插件名字 pip install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple pip show p…

猫头虎分享已解决Error || 已解决error: subprocess-exited-with-error

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

零基础HTML教程(26)--表单元素标注

文章目录 1. 引子2. 使用标注3. 元素的id与name4. 更好的写法5. 小结 1. 引子 我们看一个表单&#xff1a; <form>姓名&#xff1a;<input type"text"><br>手机号:<input type"text"><br>年龄:<input type"text&qu…

(一)Amira入门实例

1.打开Amira安装目录下的数据Foam.am图片&#xff0c;打开之后选择“um”选项。 2. 添加一个2D和3D显示组件&#xff0c;即Ortho Slice和Volume Rendering&#xff0c;分别为2D显示和3D显示&#xff08;模块左侧绿点控制是否显示&#xff09;&#xff1a; 颜色反转之后&#xf…

web案例

一、结合抽奖案例完成随机点名程序&#xff0c;要求如下: 1.点击点名按钮&#xff0c;名字界面随机显示&#xff0c;按钮文字由点名变为停止 2.再次点击点名按钮&#xff0c;显示当前被点名学生姓名&#xff0c;按钮文字由停止变为点名 3.样式请参考css及html自由发挥完成。 二…

【学习】​CSMM和CMMI的关系你了解吗

CMMI和CSMM都是评估和提升软件组织能力成熟度的模型&#xff0c;但它们在起源、应用范围、模型结构和实施目的等方面存在一些区别。在当今竞争激烈的软件市场中&#xff0c;提升软件能力成为了多数组织追求成功的关键因素。而选择适合的体系标准能够助力企业发展得更加迅速。作…

什么是拉动经济增长的“三驾马车”

从支出法核算角度看&#xff0c;经济增长是投资、消费、净出口这三种需求之和&#xff0c;因此经济学上常把最终消费支出、资本形成总额、货物和服务净出口这三者形象地比喻为拉动经济增长的“三驾马车”。 一、指标含义 最终消费支出反映消费需求&#xff0c;可以分为居民消…

Day22 SSH远程管理服务

sshd服务&#xff0c;系统自带&#xff0c;默认开机自启运行 云/物理服务器的安全组和防火墙默认放行该端口 软件包&#xff1a;openssh-server&#xff08;服务端&#xff09;&#xff1b;openssh-client&#xff08;客户端&#xff09;&#xff1b; 格式&#xff1a;ssh I…

【kotlin】利用by关键字更加方便地实现装饰器模式

关于kotlin中的by关键字的用法&#xff0c;kotlin官方文档属性委托这一节讲得很清楚。 简单来说就是这样的&#xff0c;假设存在一个接口Component如下&#xff1a; interface Component {fun method1(): IntArrayfun method2(a: Int)fun method3(a: Int, str: String) }那么对…

【Redis 开发】缓存穿透解决

缓存穿透 缓存穿透缓存空对象布隆过滤缓存空对象实现其他缓解方式 缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存就永远不会生效&#xff0c;这些请求都会打到数据库 常见的解决方案有两种&#xff1a; 缓存空对象&#xff0c;布隆过…

某某志蓝队初级一面分享

某某志蓝队初级一面分享 所面试的公司&#xff1a;某某志 薪资待遇&#xff1a;待定 所在城市&#xff1a;河北 面试职位&#xff1a;蓝队初级 面试过程&#xff1a;我感觉面试官的语速有点点快&#xff0c;就像两个字读成一个字的那种&#xff0c;在加上我耳朵不太好&…

100-Python Django 在线电子商城

基于Django的在线电子商城开发实践 一、引言 随着互联网的快速发展&#xff0c;电子商务已经成为人们日常生活中不可或缺的一部分。在线电子商城作为电子商务的重要组成部分&#xff0c;为用户提供了便捷的购物体验。本文将以Python的Django框架为基础&#xff0c;介绍如何开…

WPS-EXCEL:快速删除多个线条对象

问题图 我需要将线条快速删除 方法一:使用定位对象功能 使用定位功能&#xff1a;按Ctrl G打开定位对话框。在对话框中&#xff0c;点击“定位条件”。 定位对象&#xff1a;在定位条件对话框中&#xff0c;勾选“对象”选项&#xff0c;然后点击“确定”。这样&#xff0c;…

4 -25

1 100个英语单词两篇六级阅读 2 cf补题&#xff1b; 3 仿b站项目看源码 debug分析业务。 上了一天课&#xff0c;晚上去健身。 物理备课&#xff0c;周六去上课腻。 五一回来毛泽东思想期末考试&#xff0c;概率论期中考试。

GoLand 2021.1.3 下载与安装

当前环境&#xff1a;Windows 8.1 x64 1 浏览器打开网站 https://www.jetbrains.com/go/download/other.html 找到 2021.1.3 版本。 2 解压 goland-2021.1.3.win.zip 到 goland-2021.1.3.win。 3 打开 bin 目录下的 goland64.exe&#xff0c;选择 Evaluate for free -- Evalu…

张大哥笔记:如何选择一个好项目?

互联网已经改变了我们的日常生活&#xff0c;使我们可以便捷地获取信息&#xff0c;更快地完成工作&#xff0c;更有效地进行沟通&#xff0c;并且可以让我们更容易地获得服务。随着技术的发展&#xff0c;互联网将继续改变我们的生活.... 有时候我们会感叹&#xff0c;互联网发…

项目上线流程(保姆级教学)

01&#xff1a;注册阿里云账户 02&#xff1a;登录阿里云 03&#xff1a;在桌面新建记事本保存个人账号密码等信息 04&#xff1a;完成重置密码 05&#xff1a;安装宝塔面板 命令行 yum install -y wget && wget -O install.sh http://download.bt.cn/install/instal…

【Qt 学习笔记】Qt常用控件 | 输入类控件 | Combo Box的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 输入类控件 | Combo Box的使用及说明 文章编号&#xff…