2011-12-06 13 views
4

異なるパワーをたくさんして長い多項式を解決するためにa_m、b_m、c_mはmごとにすべて異なる。ここで、a_m、b_m、c_mはすべてmごとに異なる。集合Mは〜15-20要素を持つ。最速の方法は、私は、この多項式に、最速の解決策、Xを探しています

解決策が4より大きい場合は4を返します。解決策が<であれば0を返します。 これを行う最も簡単な方法は何ですか?それは数値でやっている?

私は、Pythonや他の言語のソリューションを好むのは、切り替えに非常に役立つ場合だけです。

これは目的関数の派生であることに注意してください。私は目的関数を最大限にしようとしています。したがって、この多項式を解く以外の方法があれば、それもうまくいくでしょう!これらの目的関数の多くを解決しようとしているので、解決策はかなり速くなければなりません。

+0

Mの要素がすべて正であると仮定できますか? – Kevin

+0

複雑な根はOKですか? – btilly

+1

Scipyの最適化パッケージ(http://docs.scipy.org/doc/scipy/reference/optimize.html)は、最適化の問題は通常最小値を見出しているとは思うが、最大化の問題に直接対処できるかもしれない。同じパッケージにはルート検索ルーチンもあります(http://docs.scipy.org/doc/scipy/reference/optimize.html#root-finding)。 – mtrw

答えて

2

ルートが1つで、すべてのルートではない場合は、Newton's Methodを使用できます。これは、説明した多項式ではかなり高速です。

LETのF(X)=すべてのM {a*x^(b) - c*x^(b-1)}

にわたる和(X) '、F、Fの誘導体(x)は、全てのM {(a*b)*x^(b-1) - (c*(b-1))*x^(b-2)}にわたる和です。

def newton(f, fprime, firstguess, epsilon): 
    x = firstguess 
    while abs(f(x)) > epsilon: 
     x = x - (f(x)/fprime(x)) 
    return x 

これは、近似根を多項式に戻します。正確でない場合は、それが十分に正確になるまで、より小さなイプシロンを渡してください。

この関数は分岐して永遠に実行されるか、ZeroDivisionErrorをスローすることがあります。慎重に取り扱ってください。

関連する問題