以前の値に基づいて未知の関数の値を予測する方法はありますか

StackOverflow https://stackoverflow.com/questions/1150862

  •  18-09-2019
  •  | 
  •  

質問

たとえば、不明な関数によって返された値があります

# this is an easy case - parabolic function
# but in my case function is realy unknown as it is connected to process execution time
[0, 1, 4, 9]

次の値を予測する方法はありますか?

役に立ちましたか?

解決

のhref = "https://stackoverflow.com/questions/1041812/what-are-some-algorithms-for-finding-a-closed-form-function-given-an-integer-sequ/ <も参照してください。 1042103" >この質問でます。

他のヒント

必ずしもそうではありません。あなたの「放物線関数は、」このように実装される可能性があります:

def mindscrew
  @nums ||= [0, 1, 4, 9, "cat", "dog", "cheese"]
  @nums.pop
end

あなたは推測を取ることができますが、確実に予測することは不可能である。

あなたはニューラルネットワークのアプローチを使用して試すことができます。あなたは、Googleのクエリ「ニューラルネットワーク関数近似」で見つけることができ、かなり多くの記事があります。多くの書籍が、例えば、もご利用いただけますます。

データポイントだけが必要な場合

データの外挿 既知のポイントの 推定, ただし、潜在的な差はデータの内挿よりもはるかに大きいことを受け入れる必要があります。 既知のポイント。厳密には、たとえそれが正常に動作する連続関数であっても、関数は既知のポイント間で異常な動作を行う可能性があるため、どちらも任意に不正確になる可能性があります。そして、もしそれが そうではありません 行儀が良い、すべての賭けはすでに終わっています ;-p

これには、単純な線形代数から 3 次スプラインのようなものまで、(コンピューター サイエンスに直接応用できる) 数学的アプローチが多数あります。そしてその間のすべて。

機能が欲しい場合

難解になりつつある。ここでのもう 1 つの興味深いモデルは遺伝的プログラミングです。既知のデータ点に対して式を展開することにより、適切に近い近似値を見つけることができます。うまくいくこともあります。そうならないこともあります。あなたが探していた言語ではありませんが、Jason Bock が .NET 3.5 でこれを行う C# コードをいくつか示しています。 進化する LINQ 式.

私はたまたま彼のコードを「手元に」持っています(いくつかのプレゼンテーションで使用しました)。のようなもので a => a * a ほぼ瞬時にそれを見つけますが、(理論上は) 事実上あらゆるメソッドを見つけることができるはずです - ただし、定義された最大実行長はありません ;-p また、(進化論的に言えば) 絶対に見つけられない行き止まりに陥る可能性もあります。回復する...

ウルフラムアルファのAPI を使用します:)

はい。多分ます。

あなたは[0,1,2,3]すなわち、あなたのケースで、いくつかの入力と出力の値を持っているし、[0,1,4,9]、あなたは(私は信じてフィッティングbasicly関数)を応答曲面を使用することができれば」へ(あなたのケースFの(X)= X ^ 2)実際の関数を推測。あなたの推測機能は、Fさせた場合(X)= C1 * X + C2 * X ^ 2 + C3結果をそのC1 = 0、C2 = 1つの、C3 = 0、あなたの入力し、指定した出力を決定し、与えられただろうアルゴリズムがありますあなたは次の値を予測することができます機能します。

この質問に対する他のほとんどの回答が同様に有効であることに注意してください。私はちょうどあなたがデータにいくつかの機能に合うようにしたいと仮定しています。言い換えれば、私はあなたの質問は非常に漠然と見つけ、できるだけ完全としてご質問を提起してみてください!

一般的には、無...あなたはそれが特定のフォーム(ある程度のNの例えば多項式)の機能だと機能を制限するのに十分な情報がある知っている場合を除きます。

例えば。より多くの「普通の」反例のためにあなたをf(n)を持つことができ、あなたは必ずしもN ^ 2ワット/それは二次方程式だ知っO仮定できない理由について(チャックの回答を参照してください)= N 4 - 6N 3 + 12N 2 - 有し6N、N = 0,1,2,3,4,5 F(N)のため= 0,1,4,9 、40145ます。

あなたはそれが特定のフォームの知っている場合は、いくつかのオプションがあります...フォームが基底関数の線形加算である場合(例えば、F(X)= + B のCOS(X)+ C のSQRT(X))を最小二乗法を使用して、あなたにそれらの基底関数を使用して最高のフィット感のための未知の係数を取得することができます。

あなたは試してみて、次の答えを推測するために統計的手法を適用することができますが、関数は、この1(c)のようなものであれば、それは非常にうまく動作しない場合があります。

int evil(void){
  static int e = 0;
  if(50 == e++){
    e = e * 100;
  }
  return e;
}

この関数は、BAM ...そして素敵なシンプルな増加番号を返します。

これは難しい問題です。

あなたはそれがそのような可能な可能性があり、特別な場合のために漸化式の方程式をチェックアウトする必要がありますタスクます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top