簡體   English   中英

Python scipy fsolve無法正常工作

[英]Python scipy fsolve works incorrectly

我有方程式:

import numpy as np
from scipy import optimize

def wealth_evolution(price, wealth=10, rate=0.01, q=1, realEstate=0.1, prev_price=56):
    sum_wantedEstate = 100
    for delta in range(1,4):
        z = rate - ((price-prev_price) / (price + q / rate))
        k = delta * np.divide(1.0, float(np.maximum(0.0, z)))
        wantedEstate = (wealth / (price + q / rate)) * np.minimum(k, 1) - realEstate
        sum_wantedEstate += wantedEstate
    return sum_wantedEstate

所以我找到了這個方程的解:

sol = optimize.fsolve(wealth_evolution, 200)

但是,如果我將sol代入方程式,則不會得到0welth_evolution(sol) )。 為什么會發生? fsolve找到f(x)=0的根。

UPD: full_output提供:

(array([ 2585200.]), {'qtf': array([-99.70002298]), 'nfev': 14, 'fjac': array([[-1.]]), 'r': array([  3.45456519e-11]), 'fvec': array([ 99.7000116])}, 5, 'The iteration is not making good progress, as measured by the \n  improvement from the last ten iterations.')

您是否嘗試過繪制功能?

import numpy as np
from scipy import optimize
from matplotlib import pyplot as plt
small = 1e-30
def wealth_evolution(price, wealth=10, rate=0.01, q=1, realEstate=0.1, prev_price=56):
    sum_wantedEstate = 100
    for delta in range(1,4):
        z = rate - ((price-prev_price) / (price + q / rate))
        k = delta * np.divide(1.0, float(np.maximum(small, z)))
        wantedEstate = (wealth / (price + q / rate)) * np.minimum(k, 1) - realEstate
        sum_wantedEstate += wantedEstate
    return sum_wantedEstate




price_range = np.linspace(0,10000,10000)
we = [wealth_evolution(p) for p in price_range]

plt.plot(price_range,we)
plt.xlabel('price')
plt.ylabel('wealth_evolution(price)')
plt.show()

在此處輸入圖片說明

至少對於您指定的參數,它沒有根,這是fsolve試圖找到的根。 如果要最小化功能,可以嘗試fmin 對於此功能,這將無濟於事,因為它似乎漸近地衰減到99.7左右。 因此,將其最小化將導致無限的價格

因此,要么您必須忍受這一點, 要么想出另一種功能來優化限制搜索范圍(在這種情況下,您不必搜索,因為它只是最大值...)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM