逆向复数二维查找表

2024-03-06

I have some function f(x,y)->(a,b) which maps some input (x,y) to the output (a,b). The output is a complex number. What I'm actually interested in is the inverse function g(a,b)->(x,y). But since this inversion can't be done in a analytical way I need to do it with a numerical approximation.

Since f(x,y) is computationally expensive my idea was to use a lookup table approach. I can generate a 2D lookup table with the dimensions (x,y) (forward lookup table), but what I actually need is the inverse of this lookup table—yielding (x,y) based on a given (a,b).

对于查找表的反转,我能想到的最简单的方法是使用正向查找表的条目作为顶点,并在规则网格中的它们之间进行插值,产生反向查找表。如果反向查找表对于所需的精度来说太大,我将生成粗略表并使用这些值作为优化算法的起始值。我缺少任何更简单的方法吗?

Where kz, theta0 are constant and hV, sigma are (x,y).


  1. for f(x,y)您可以使用f(x,y)->(a,b)2D LUT(查找表)

    但存储的网格点必须选择得足够密集,以便每个网格矩形最多有一个凹凸,否则插值将无法正常工作。

    如果要使用线性插值,则局部最小值/最大值必须是 LUT 内的点,因为并不总是需要更高阶的多项式插值。我会用4点三次插值 https://stackoverflow.com/a/20517874/2521214

  2. 如何计算g(a,b)->(x,y)

    • 首先,反向映射可能吗?
    • 那么有多少(x,y)点返回相同(a,b)=f(x,y) ?
    • 它与问题相同:是f功能与否?

    if f不是函数那么你就会遇到问题并且无法解决这个问题,除非以某种方式将范围细分为子范围,其中f是函数,然后您必须根据一些规则选择适当的范围,具体取决于您想要做什么。所以让我们假设f是函数

    那么如何计算(x,y)=g(a,b) that f(x,y)=(a,b)?

    1. 我将从结果的近似值开始。所以尝试够了(x,y)沿整个范围的值并存储最接近所需输出的点,以便|f(x,y)-(a,b)|是最小的。

    2. 然后再次开始,但不是在全范围,而是在这个点附近

      • 递归地将准确性提高到您需要的程度。
      • 看这里提高超越方程求解的精度 https://stackoverflow.com/q/29166819/2521214我正在计算类似的问题,有 2D 点的 1D LUT(a(t),y(t))并需要逆 3D 点(a0,y0,z0)你可以在那里使用我的近似类

近似值的嵌套是这样完成的:

int n=5;  // recursions
double e; // Error Of Solution Variable
approx ax,ay;
//            min    max   step   
for (ax.init(-100.0,+100.0,10.0,n,&e);!ax.done;ax.step())
for (ay.init(-100.0,+100.0,10.0,n,&e);!ay.done;ay.step())
    {
    e=|f(ax.a,ay.a)-(a,b)|;
    }
// here (ax.a,ay.a) should hold your solution for input point `(a,b)`
  • 初始步骤应该尽可能小,这样就不会错过任何凹凸
  • if your g(a,b)形状太复杂那么这可能无法正常工作

由此您可以计算逆 LUT 表...

  • 每次递归都将步长除以10所以选择n wisely.

对于 2D 和奇异点来说,这的性能还不错O((log(N))^2)。我在 3D 上做这个O((log(N))^3) with 100点每e计算速度非常慢(大约 35 秒)

  • where N=(10^n)*(max-min)/step, and n是递归次数
  • 准确度是step/(10^n)
  • 不要忘记将最小值、最大值更改为您使用的范围......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

逆向复数二维查找表 的相关文章

  • 如何从二叉搜索树中均匀随机地返回节点?

    给定一个 BST 可能平衡也可能不平衡 如何能够均匀地随机返回 任何 节点 一个限制是您不能使用外部索引数据结构 您必须以每个节点都有平等被访问的机会的方式遍历树 这个问题让我困惑了好一阵子 如果我们确实可以使用外部哈希表 指针 我们可以对
  • 使用数学符号注释 Adob​​e Reader PDF

    我阅读的许多数学教科书和其他文献都是 PDF 格式 因此我经常使用 Adob e Reader 注释工具对它们进行注释 我确实找到了一个有用的指南 http cjasn asnjournals org site misc annotatin
  • Exposé 布局算法

    我正在制作一些项目 其布局类似于 Mac OS X 在 Expos 中对窗口所做的操作 它适应项目的长宽比和可用区域的长宽比 基本上 可用区域分为行和列 每个单元格 行和列的交集 中放置一个项目 这些项目必须保持其纵横比 此处width h
  • 使用FFT算法计算

    给定在平面上的点 1 0 2 0 n 0 上发现的一组 n 个粒子电荷载流子 在 i 0 点发现的粒子电荷记为 Qi 作用在粒子上的力由以下公式给出 C is a Coulomb s constant 给出一个算法来计算 Fi 对于总复杂度
  • 从日志文件中获取前 100 个 URL

    我的一位朋友在接受采访时被问到以下问题 谁能告诉我如何解决它 我们有一个相当大的日志文件 大约 5GB 日志文件的每一行都包含一个用户在我们网站上访问过的 URL 我们想要找出用户访问最多的 100 个 URL 怎么做 如果我们有超过 10
  • 字符串排序真的是 O(n^2logn) 吗? [复制]

    这个问题在这里已经有答案了 我读了以下内容 排序需要 O NlogN 那么它怎么是 O N 2logN 我们在这里想念的是 两个字符串的比较不是 O 1 在最坏的情况下 需要 在 所以最终的复杂度是O N 2logN 它是否正确 我一直认为
  • 如何在给定目标索引数组的情况下对数组进行就地排序?

    你如何对给定的数组进行排序arr in place给定目标索引数组ind 例如 var arr A B C D E F var ind 4 0 5 2 1 3 rearrange arr ind console log arr gt B E
  • 在 O(n) 时间内找到 n x n 矩阵中的局部最小值

    所以 这不是我的家庭作业问题 而是取自 coursera 算法和数据结构课程的未评分作业 现已完成 You are given an n by n grid of distinct numbers A number is a local m
  • 编程 Pearls - 随机选择算法

    Programming Pearls 第一版第 120 页介绍了从 N 个整数总体中选择 M 个等概率随机元素的算法 InitToEmpty Size 0 While Size lt M do T RandInt 1 N if not Me
  • 如何在Python中显示坐标网格线的变换?

    假设我有常规的笛卡尔坐标系 x y 并且我考虑一个矩形网格区域 D 分成小方块 我想看看域 D 如何在 Python 中的坐标变换 T x y gt u x y v x y 下映射 我正在寻找这样的东西 See here https mat
  • 使用主方法求解 T(n) = 2T(n/2) + n/log n 和 T(n) = 4T(n/2) + n/log n 之间的差异

    我最近偶然发现了一个资源 其中 2T n 2 n log ntypeMM 宣布复发无法解决 我接受它作为一个引理 直到今天 另一种资源被证明是矛盾的 在某种意义上 根据资源 下面的链接 其中的 Q7 和 Q18 是建议 分别在问题中的1和2
  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • 约束 3D 表面的 RBF 插值以保持曲率

    我的任务是开发一种算法 给定一组表示现有表面测量值的稀疏点 我们就可以计算表面上任何点的 z 坐标 面临的挑战是找到一种合适的插值方法 该方法可以在仅给定几个点的情况下重新创建 3D 表面 并推断出超出包含初始测量值的范围的值 对于许多插值
  • 有人可以解释以下异或属性

    我的一个论坛提到给定的数组n数字 arr 0 n 1 以下条件成立 is the xor运算符 f l r f 0 r f 0 l 1 where f l r arr l arr l 1 arr r 我检查了上面的数组数量和不同的值l an
  • 时间复杂度和运行时间有什么区别?

    时间复杂度和运行时间有什么区别 它们是一样的吗 运行时间是指程序运行所需的时间 时间复杂度是对输入大小趋于无穷大时运行时间渐进行为的描述 您可以说运行时间 是 O n 2 或其他什么 因为这是描述复杂性类和大 O 表示法的惯用方式 事实上
  • 无需构建树即可预测霍夫曼压缩比

    我有一个二进制文件 我知道其中每个符号出现的次数 如果我要使用霍夫曼算法压缩它 我需要预测压缩文件的长度 我只对假设的输出长度感兴趣 而不对单个符号的代码感兴趣 因此构建霍夫曼树似乎是多余的 作为一个例子 我需要得到类似的东西 包含 4 个
  • 关于在字典中查找所有有效单词的算法问题

    给定一个字典 只是一个字符串列表 您收到来自外部来源的未知数量的信件 给定字母串 您将如何列出您可以通过这些字母的任意组合组成的所有有效单词 来自字典 因此 如果您收到 applead 你应该找到apple bad pad lead等 我知
  • 带路径压缩算法的加权 Quick-Union

    有一种 带路径压缩的加权快速联合 算法 代码 public class WeightedQU private int id private int iz public WeightedQU int N id new int N iz new
  • 用 C++ 生成 AST

    我正在用 C 制作一个解释器 到目前为止我已经有了词法分析器来生成标记 问题是我不确定如何生成 行走 解析树 我正在考虑使用数组数组来制作解析树 但我不确定如何以正确的顺序将标记实际插入到解析树中 我不确定是自上而下 左右还是自下而上 左右
  • 二维数组的 MPI 数据类型

    我需要将一个整数数组的数组 基本上是一个二维数组 从根传递给所有处理器 我在 C 程序中使用 MPI 如何声明二维数组的 MPI 数据类型以及如何发送消息 我应该使用广播还是分散 你需要使用播送 http www netlib org ut

随机推荐