首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python工作不正确。

Python工作不正确。
EN

Stack Overflow用户
提问于 2015-12-01 21:09:11
回答 1查看 1.3K关注 0票数 0

我有方程:

代码语言:javascript
复制
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

所以我找到了这个方程的解:

代码语言:javascript
复制
sol = optimize.fsolve(wealth_evolution, 200)

但是,如果我把sol替换成方程,就不会得到0 (welth_evolution(sol))。为什么会这样?fsolve找到了f(x)=0的根。

UPD:full_output给出:

代码语言:javascript
复制
(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.')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-02 14:21:26

你试过绘制你的函数了吗?

代码语言:javascript
复制
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左右。因此,将其最小化将导致无限的代价。

因此,要么您必须接受这种情况,要么想出一个不同的函数来优化或限制搜索范围(在这种情况下,您不必搜索,因为它只是最大值.)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34030183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档