# linear3


linear 算法的三维插值

函数库: TyMath

# 语法

Vq = linear3(X,Y,Z,V,Xq,Yq,Zq)

# 说明

Vq = linear3(X,Y,Z,V,Xq,Yq,Zq) 使用linear 算法的三维插值返回三变量函数在特定查询点的插值。结果始终穿过函数的原始采样。X、Y 和 Z 包含样本点的坐标。V 包含各样本点处的对应函数值。Xq、Yq 和 Zq 包含查询点的坐标。示例

# 示例

使用 linear3 方法进行插值

加载 flow 函数的点和值,每个维度采样 10 个点。

using TyMath
using TyBase
using TyPlot
X,Y,Z,V = TyPlot.flow(10;nargout=4)

flow 函数通过数组 X、Y 和 Z 返回网格。该网格覆盖区域 0.1≤X≤10、−3≤Y≤3、−3≤Z≤3,间距为 ΔX=0.5、ΔY=0.7 和 ΔZ=0.7。

创建间距为 0.25 的查询网格。

Xq,Yq,Zq = meshgrid3(.1:.25:10,-3:.25:3,-3:.25:3)

对查询网格中的点插值。

Vq = linear3(X,Y,Z,V,Xq,Yq,Zq);
在 X,Y 和 Z 域范围外执行计算

创建网格向量 x、y 和 z。这些向量用于定义与 V 中的值相关联的点。

using TyMath
x = 1:100
y = 1:50
z = 1:30

将样本值定义为一个 50×100×30 的随机数数组 V。使用 rand 函数创建数组。

rng = MersenneTwister(1234)
V = rand(rng, 50,100,30)

计算 x、y 和 z 域范围外三个点处的 V。

xq = [0 0 0]
yq = [0 0 51]
zq = [0 101 102]
vq = linear3(x,y,z,V,xq,yq,zq)
vq = 1×3 Matrix{Float64}:
 -1.95976  254.097  -118.233

# 输入参数

X,Y,Z - 样本网格点
数组 | 向量

样本网格点,指定为实数数组或向量。样本网格点必须是唯一的。

示例: X,Y,Z = meshgrid3(1:30,-10:10,1:5)

数据类型: Int | Float

V - 样本值
数组

样本值,指定为实数或复数数组。V 的大小要求取决于 X、Y 和 Z 的大小:

  • 如果 X、Y 和 Z 是表示完整网格(meshgrid 格式)的数组,则 V 的大小与 X、Y 或 Z 的大小匹配;

  • 如果 X、Y 和 Z 是网格向量,则 size(V) = (length(Y),length(X), length(Z))。

如果 V 包含复数,则 linear3 将分别对实部和虚部插值。

示例: rand(10,10,10)

数据类型: Int | Float

复数支持: 是

Xq,Yq,Zq - 查询点
标量 | 向量 | 数组

查询点,指定为实数标量、向量或数组。

  • 如果 Xq、Yq 和 Zq 是标量,则为 R3中单个查询点的坐标;

  • 如果 Xq、Yq 和 Zq 是方向不同的向量,则 Xq、Yq 和 Zq 将被视作 R3 中的网格向量;

  • 如果 Xq、Yq 和 Zq 是大小和方向都相同的向量,则 Xq、Yq 和 Zq 将被视作 R3 中的散点

  • 如果 Xq、Yq 和 Zq 是大小相同的数组,则表示 R3 中由查询点构成的一个完整网格(meshgrid 格式)或多个散点。

示例: Xq,Yq,Zq = meshgrid3(1:0.1:10,-5:0.1:0,3:5)

数据类型: Int | Float

# 输出参数

Vq - 插入的值
标量 | 向量 | 矩阵

插入的值,以实数或复数标量、向量或矩阵的形式返回。Vq 的大小和形状取决于所用的语法以及(某些情况下)输入参数的大小和值。

语法 特殊条件 Vq 的大小 示例
linear3(X,Y,Z,V,Xq,Yq,Zq) Xq 、Yq 和 Zq 是标量 标量 将 Xq 、Yq 和 Zq 作为标量传递时,size(Vq) = (1,1)。
Xq 、Yq 和 Zq 是大小和方向都相同的向量 大小和方向与 Xq 、Yq 和 Zq 相同的向量 如果 size(Xq) = (100,1)、
size(Yq) = (100,1)
且 size(Zq) = (100,1),
则 size(Vq) = (100,1)。
Xq 、Yq 和 Zq 是混合方向的向量 size(Vq) = (length(Y), length(X),
length(Z))
如果 size(Xq) = (100,1)、
size(Yq) = (1,50)
且 size(Zq) = (5,1),
则 size(Vq) = (50,100,5)。
Xq 、Yq 和 Zq 是大小相同的数组 大小与 Xq 、 Yq 和 Zq 相同的数组 如果 size(Xq) = (50,25)、
size(Yq) = (50,25)
且 size(Zq) = (50,25),
则 size(Vq) = (50,25)。

数据类型: Int | Float

复数支持:

# 详细信息

严格单调

一组始终递减或递增且无反转的值。例如,序列 a = [2 4 6 8] 便是一个严格单调递增的序列。序列 b = [2 4 4 6 8] 则非严格单调,因为 b[2] 与 b[3] 之间的值无变化。而序列 c = [2 4 6 8 6] 在 c[4] 与 c[5] 之间包含反转,因此连单调序列也不是。

完整网格(meshgrid)格式

对 linear3 而言,完整网格包含三个数组,其元素是一些网格点,用来定义 R3 中的区域。第一个数组包含 x 坐标,第二个数组包含 y 坐标,第三个数组包含 z 坐标。每个数组中的值沿单个维度会有所不同,而沿其他维度则为常量。

x 数组中的值严格单调递增,且沿第二个维度变化。y 数组中的值严格单调递增,且沿第一个维度变化。z 数组中的值严格单调递增,且沿第三个维度变化。使用 meshgrid3 函数创建可传递至 linear3 的完整网格。

网格向量

对 linear3 而言,网格向量由三个具有混合方向的向量组成,这些向量用来定义 R3 中的网格点。

例如,以下代码便为区域 1 ≤ x ≤ 3、4 ≤ y ≤ 5 和 6 ≤ z ≤ 8 创建了一个网格向量:

x = 1:3
y = (4:5)'
z = 6:8
散点

对 linear3 而言,散点由三个用来定义 R3 散点集合的数组或向量 Xq、Yq 和 Zq 组成。第 i 个数组包含第 i 个维度的坐标。

例如,以下代码便指定了点 (1, 19, 10)、(6, 40, 1)、(15, 33, 22) 和 (0, 61, 13)。

Xq = [1 6; 15 0]
Yq = [19 40; 33 61]
Zq = [10 1; 22 13]

# 另请参阅

interp1 | interp2 | interpn | meshgrid3