-2

kの特定の範囲内のすべての根を見つけようとしている単一変数の非常に複雑な正定線形連続関数がありkます。言う-4 < k < 4

これまで、とのk_j両方が存在する点を検索することにより、関数の最小値を最初に推定しました。次に、これらの各ポイントを開始点として使用して、最適化関数 を適用します。この方法はある程度効果がありました。ただし、関数が複雑になるにつれて、最小値の検索に時間がかかり、不正確になる可能性があります。$k_{j+1}>k_j$$k_{j-1}>k_j$scipy.optimize.newton

numpyまたは、関数scipyの特定のドメイン (例: -4 < k < 4) を検索してすべてのルートを検索する組み込み関数はありますか。近くを検索するために正確なポイントを指定する必要がないように、計算効率をいくらか犠牲にしても構わないと思っています。

ありがとう

4

1 に答える 1

0

範囲を使用できます:

k_list = range(-4, 4)

しかし、それは整数のみを行います。ここでの問題は、ステップを指定することです。明らかに、-4 から 4 までの無限の小数があるため、移動する小数の数を指定する必要があります。

numpy.arange範囲からリストを作成し、増分値を設定するために使用できます

例えば

k_list = numpy.arange(-4, 4, 0.5)

0.5ずつ増加します

>>> numpy.arange(-4, 4, 0.5)
>>> [-4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4]

増分を小さくして値の範囲を広げたい場合は、0.5 を小さくします。

前述のように、その範囲には無限の小数があるため、増分を指定する必要があります。

リストを指定したら、関数を使用してリストを反復処理してルートを見つけることができます。

for k in k_list:
    some_function(k)
    return root

編集:

これが機能するには、もちろんkの根を見つける関数が必要ですが、私があなたの質問を正しく理解していれば、単純な例を使用するために、これはあなたの線形方程式である必要があります:(root = 2k これを書く数学的な方法はコースy=2x

y=2x簡単にするために、関数がスクリプトになる時点であるとだけ言っておきましょう

k_list = numpy.arange(-4, 4, 0.5)

for k in k_list:
    root = 2*k
    return root

k次に、0.5 に独自の値を指定して、値が何桁になるかを決定します。

もちろん、二次形式を見ている場合を除きます。その場合、次のようなものがあるかもしれません

y = x^2 - 2x +2

これにより、質問が少し混乱します。設定することで明らかに x のルートを見つけることがy=0できますが、これで、式ではなく合計を残して、指定した k の意味であると私が想像する変数が 1 つあります。

この場合y=k、値を指定してk解いてルートを見つけます。

例えば:

y = 32x^2 - 7.2x + 12
let y = k
k = 32x^2 - 7.2x +12
let k = -4 (we'd iterate through your range in reality)
4 = 32x^2 - 7.2x + 12
0 = 32x^2 - 7.2x + 8
and solve for x (aka. root)

同じ変数の複数のインスタンスを持つ式を解くためのnumpyorメソッドがあると思います。scipy私はどちらのライブラリの専門家でもないので、その方向でアドバイスすることはできません。

参照: http://docs.scipy.org/doc/numpy/reference/generated/numpy.roots.html http://docs.scipy.org/doc/numpy/reference/generated/numpy.polyval.html# numpy.polyval

于 2014-09-01T12:35:39.767 に答える