フォームの曲線までの複数の点の距離を見つける必要があります。f(x) = a^(k^(bx))
私の最初のオプションは、その導関数を使用し、導関数の逆数を持つフォームの線を使用して、の座標を与えPoint
、元の曲線と交差させることでした。最後に、単純なジオメトリを使用してポイント間の距離を計算します。
それは私が通常従う数学的プロセスです。(遺伝的アルゴリズムプログラムを実行しているので)時間を節約する必要があるので、これを行うための効率的な方法が必要です。アイデア?
フォームの曲線までの複数の点の距離を見つける必要があります。f(x) = a^(k^(bx))
私の最初のオプションは、その導関数を使用し、導関数の逆数を持つフォームの線を使用して、の座標を与えPoint
、元の曲線と交差させることでした。最後に、単純なジオメトリを使用してポイント間の距離を計算します。
それは私が通常従う数学的プロセスです。(遺伝的アルゴリズムプログラムを実行しているので)時間を節約する必要があるので、これを行うための効率的な方法が必要です。アイデア?
点(c、d)と曲線の間の距離は、関数の最小値です。
sqrt((c-x)^2 + (d-a^(k^(bx)))^2)
その最小値を見つけるために、私たちはを忘れsqrt
て一次導関数を見ることができます。それが0である場所を見つけます(最大距離がないため、最小距離である必要があります)。これにより、曲線上の最も近い点のx座標が得られます。距離を取得するには、y座標を計算してから、ポイントまでの距離を計算する必要があります(その時点で距離関数を計算するだけでx
、同じことです)。
ポイントごとに繰り返します。
距離関数の一次導関数は、残念ながら一種の雌犬です。Wolframの派生物を使用すると、結果はうまくいけば(コピーエラーが発生していない場合):
dist(x)/dx = 2(b * lna * lnk * k^(bx) * a^(k^(bx)) * (a^(k^(bx)) - d) - c + x)
ポイントからカーブまでの距離を見つけるのは簡単な作業ではありません。そのため、関数のグローバルを見つける必要があります。ここで、f(x)はカーブを決定する関数です。
その目標には、次のものを使用できます。シンプレックス
法
Nelder_Mead_methodgradient_descent
このメソッドは、 Solver Foundation、NMathなどの多くのライブラリに実装されています。