Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我想写一个函数f_1(a,b) = (x,y),它近似于 f 的倒数,其中f(x,y) = (a,b)是一个双射函数(在特定范围内)
关于如何获得有效数值近似的任何建议?
使用的编程语言并不重要。
求解f(x,y)=(a,b)x,y 等效于求f(x,y)-(a,b)(= 0) 的根或最小值,因此您可以使用任何标准的求根或优化算法。如果你自己实现这个,我推荐坐标下降,因为它可能是最简单的算法。您也可以尝试自适应坐标下降,尽管这可能更难分析。
f(x,y)=(a,b)
f(x,y)-(a,b)
如果你想在一个范围内找到逆,你可以在不同的点计算逆,然后用三次样条进行插值,或者在你想计算逆函数时求解上面的方程。即使您为每个评估求解方程,预先计算一些值仍然可能会有所帮助,以便它们可以用作求解器(例如坐标下降)的初始值。
另见牛顿法和二分法
没有适用于任何一般功能的“自动”解决方案。即使在 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)