2d双射函数逆的算法

时间:2012-11-14 02:27:21

标签: algorithm

我想写一个函数 f_1(a,b)=(x,y)近似f的倒数,其中 f(x,y)=(a,b )是双射函数(在特定范围内)

有关如何获得有效的数值近似的任何建议?

使用的编程语言并不重要。

2 个答案:

答案 0 :(得分:1)

为x求解f(x,y)=(a,b),y相当于找到f(x,y)-(a,b)(= 0)的根或最小值,因此您可以使用任何标准的根查找或优化算法。如果你自己实现这个,我推荐Coordinate descent因为它可能是最简单的算法。你也可以尝试Adaptive coordinate descent,虽然这可能有点难以分析。

如果要在一个范围内找到倒数,可以在不同点计算逆,并用Cubic Spline之类的内插进行插值,或者在想要计算反函数时求解上述等式。即使您为每个评估求解方程式,预先计算某些值仍然有用,这样它们就可以用作求解器的初始值,例如坐标下降。

另见Newton's methodBisection method

答案 1 :(得分:0)

没有“自动”解决方案可以用于任何一般功能。即使在y = f(x)的较简单情况下,也很难找到合适的起点。举个例子:

y = x^2 

有一个很好的代数逆

x = sqrt(y)

但是尝试用多项式(例如)近似[0..1]范围内的sqrt函数很糟糕。

如果您的范围足够小,并且您的功能表现得足够好,那么您可能会使用2D样条线。如果这样做,那么你应该尝试使用x和y的独立函数,即使用

y = Y_1(a,b)  and x = X_1(a,b)

而不是更复杂的

(x,y) = F_1(a,b)