matlab - 插值分散的 3D 电场数据
问题描述
我测量了以下形式的三个维度的电场数据:
pos = [x1 y1 z1
x2 y2 z2
. . .
x1000 y1000 z1000]
ef = [e_x1 e_y1 e_z1
e_x2 e_y2 e_z2
. . .
e_x1000 e_y1000 e_z1000]
这些位置位于半个球内。我希望能够在球体的某个点插入电场,这样我就可以接收到电场分量的所有三个值,而不仅仅是整个场的范数。interp3 将不起作用,因为这些点不在网格中。scatterInterpolant 需要范数作为输入,生成的函数只返回范数。关于使用什么功能或如何解决这个问题的任何建议?
解决方案
scatteredInterpolant
一次只插入一列样本,但插入向量场的一种方法是独立插入向量的每个分量。
这很简单scatteredInterpolant
。
componentInterpolants = cellfun(@(v) {scatteredInterpolant(pos,v)}, num2cell(ef,1));
这为您留下了一个由三个scatteredInterpolant
对象组成的元胞数组,每个对象对应字段的每个笛卡尔分量。通过针对指定坐标单独评估它们中的每一个并将结果连接起来,您可以获得每个给定坐标的电场矢量。您可以定义一个便利函数,为给定的偏移坐标提供完整的插值矢量场:
efInterpolant = @(coords) cell2mat(cellfun(@(interpolant) {interpolant(coords)}, componentInterpolants));
验证这是否准确地插入了原始向量场(排除浮点错误):
assert(all(all(abs(ef - efInterpolant(pos)) < eps * 2)));
如果独立插值每个笛卡尔分量不能保持您在该字段中期望的向量分量之间的某种关系,那么您可能需要一种不同的数值方法——也许在采用相同的插值方法之前进行一些坐标变换——但这可能更多是数学的问题堆栈交换站点。
推荐阅读
- wordpress - WordPress 自动登录表单填写按钮
- webpack - 从 v4 替换 Webpack v5 中进程的 polyfill
- javascript - 这两种发布方法 [Typescript] 之间有什么区别吗?
- flutter - Flutter Web:CORS 策略已阻止在 ** 从源 ** 访问 XMLHttpRequest
- xcode - 架构 x86_64 的未定义符号:clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- python - 尝试使用计数器检查值是否在范围内
- azure-resource-manager - Azure ARM 模板 - 将 virtualMachines/extensions 与 CopyIndex 一起使用
- twitter - 如何获取喜欢我的推文的用户列表和引用转发我的推文的用户列表?
- kubernetes - Kubernetes:如果我们已经有了 HPA,那么资源限制有什么用?
- mysql - 有没有办法使用合并语句将此查询转换为 Oracle 查询?