私は、Pythonの別の関数から変数を返す関数を書こうとしています。Excelソルバーのようなものです。Pythonを使って変数を返します。
私の例を簡略化するために、関数にいくつかの変数をとり、価格を計算します。実際の値(a、b、c、d、x)をこの関数に渡して数値を返すようにします。
def calc_price(a,b,c,d,x):
value = a+b*c-d + x
return value
今、私は目標価格aとbとcとdを与えられました。変数xは未知数だけですので、変数xを解くことができます。 calc_priceと同じ変数にtarget_priceという変数を追加する関数にこれを組み込みたいと思います。
def solve(target_price, a,b,c,d):
#this function takes in values for target_price, a,b,c,d
#and should do something like this:
target_price = calc_price(a,b,c,d,x)
solve for x <---------this is the part I'm not sure how to do
return x
私はループによって値xを解くバックアップするには、以下のように機能を作成したが、それは大規模なデータセットを計算するので、私は、より効率的なソリューションを探している中で、非効率的です。
def solve(target_price,a,b,c,d):
x = 0.01
while x < 1:
if abs(target_price - calc_price(a,b,c,d,x)) < 0.001:
return x
x += 0.001
ありがとうございます!
[scipy.optimize.minimize_scalar](https://docs.scipy.org/doc/scipy-0.19.1/reference/generated /scipy.optimize.minimize_scalar.html)。それは金の基準になります(数値的方法では、他の世界のコンピュータ代数システムを参照する必要はありません)。それがあまりにも重いコード/ lib依存関係の場合:root-findingとcoを参照してください。 – sascha
@サシャ、「ゴールデン」の標準を意味していません:-) https://docs.scipy.org/doc/scipy-0.19.1/reference/optimize.minimize_scalar-golden.html –
かなりいいスチュアート。しかし、私はブレントを使用しています(少なくとも、誰かが私のためにそれを実装していれば): – sascha