【发布时间】:2021-05-06 15:28:21
【问题描述】:
from scipy.optimize import fsolve
def f_sum(beta, gamma, x):
f = (
3 * x ** (3 * (1 - gamma)) / (np.exp(1 / beta) - x ** (1 - gamma))
+ x ** (4 * (1 - gamma)) / (np.exp(1 / beta) - x ** (1 - gamma)) ** 2
- 3 * x ** (3) / (np.exp(1 / beta) - x ** (1))
- x ** (4 * (1)) / (np.exp(1 / beta) - x ** (1)) ** 2
)
return f
def equilibrium(p, beta, gamma, x):
if x > 1:
return 1000
elif x < -1:
return -1000
else:
g = (
x * (1 - x ** 2) * (1 - p) / 2
+ f_sum(beta, gamma, (x + 1) / 2)
- f_sum(beta, gamma, (1 - x) / 2)
)
return g
print(fsolve(lambda x: equilibrium(1.0, 0.1, 0.3775, x), 0.6))
我正在使用 fsolve 来查找严格介于 -1 和 1 之间的函数的根。x 介于 -1 和 1 之间。而 gamma 介于 0 和 0.5 之间。 Beta 为正。
我知道该函数有3个根-1、0和1。我只是尝试看看是否还有更多用于特定参数组合的参数。
但是,对于具体参数,解与初始条件相同。我试图绘制函数并且没有这样的固定点,所以这显然是错误的。
我还收到以下错误:“RuntimeWarning:迭代没有取得良好进展,由 过去十次迭代的改进。 warnings.warn(msg, RuntimeWarning)"
有什么问题?我还尝试更改所选参数的初始条件(在打印函数中),但高于 initial=0.6 时,它一直给出初始值。
【问题讨论】:
-
嗨。你需要深入研究你的功能。
x=e**(1/beta*(1-gamma))和x=e**(1/beta)有两个奇点。您需要检查功能域,它是否总是为x<0定义的?我猜你所说的“定点”是函数根f(x)=0。您可以简单地验证对于beta=gamma=1对于x=0你得到y!=0所以0并不总是一个根。 -
嗨,它们不是奇点,因为 x 介于 -1 和 1 之间。我应该指定 gamma 介于 0 和 0.5 之间,抱歉,感谢您的说明,我将对其进行编辑。
-
嗯,好的。这是你的功能吗? geogebra.org/calculator/kbdnv97h
-
是的。但我关心小 p 让我们现在说 p
标签: python optimization scipy