我想寫一個函數來解決從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)。這將是黃金標準(在數值方法中,爲其他世界查找計算機代數系統,不一定推薦)。如果這是一個太重的代碼/庫依賴:查找根發現和合作。 – sascha
@sascha,你是不是指'金'標準:-) https://docs.scipy.org/doc/scipy-0.19.1/reference/optimize.minimize_scalar-golden.html –
相當不錯的斯圖爾特。但我會使用布倫特(至少當有人已經爲我實現了它):-) – sascha