f の逆数を近似する関数f_1(a,b) = (x,y)を書きたいと思います。ここで、 f(x,y) = (a,b)は全単射関数です (特定の範囲で)。
効率的な数値近似を取得する方法について何か提案はありますか?
使用するプログラミング言語は重要ではありません。
f の逆数を近似する関数f_1(a,b) = (x,y)を書きたいと思います。ここで、 f(x,y) = (a,b)は全単射関数です (特定の範囲で)。
効率的な数値近似を取得する方法について何か提案はありますか?
使用するプログラミング言語は重要ではありません。
f(x,y)=(a,b)
x,y を解くことは、 f(x,y)-(a,b)
( = 0) の根または最小値を見つけることと同じであるため、標準の根発見アルゴリズムまたは最適化アルゴリズムのいずれかを使用できます。これを自分で実装する場合は、おそらく最も単純なアルゴリズムであるため、Coordinate descentをお勧めします。分析が少し難しいかもしれませんが、適応座標降下を試すこともできます。
ある範囲で逆関数を見つけたい場合は、さまざまな点で逆関数を計算して3 次スプラインのようなもので補間するか、逆関数を評価したいときはいつでも上記の方程式を解くことができます。評価ごとに方程式を解いたとしても、座標降下などのソルバーの初期値として使用できるように、いくつかの値を事前に計算しておくと便利な場合があります。
一般的な機能で機能する「自動」ソリューションはありません。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)