我想写一个函数 f_1(a,b)=(x,y)近似f的倒数,其中 f(x,y)=(a,b )是双射函数(在特定范围内)
有关如何获得有效的数值近似的任何建议?
使用的编程语言并不重要。
答案 0 :(得分:1)
为x求解f(x,y)=(a,b)
,y相当于找到f(x,y)-(a,b)
(= 0)的根或最小值,因此您可以使用任何标准的根查找或优化算法。如果你自己实现这个,我推荐Coordinate descent因为它可能是最简单的算法。你也可以尝试Adaptive coordinate descent,虽然这可能有点难以分析。
如果要在一个范围内找到倒数,可以在不同点计算逆,并用Cubic Spline之类的内插进行插值,或者在想要计算反函数时求解上述等式。即使您为每个评估求解方程式,预先计算某些值仍然有用,这样它们就可以用作求解器的初始值,例如坐标下降。
答案 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)