我对此很陌生,但我需要解决数学问题,包括找到一个函数的根,它涉及累积密度函数(几个)。
为简单起见,我尝试编写类似的程序,但功能尽可能简单,但即使这样也行不通。
有人会告诉我,我做错了什么?
from scipy.optimize import fsolve
import sympy as sy
import numpy as np
from scipy.stats import norm
y=sy.Symbol('y')
def cdf(x):
cdf_norm=norm.cdf(x,100,20)
return cdf_norm
result=fsolve(y**2-14*y+7-cdf(y))
print(result)
答案 0 :(得分:2)
问题似乎是fsolve要求第一个参数是函数。但是,你传递了一个表达式,它被评估为某个值,但是, expression有一个未定义的变量名y,因此解释器会抛出NameError
。此外,它还需要一个参数,一个包含对根的估计的ndarray。因此,一个简单的解决方案是定义另一个函数:
def f(y):
return y**2 - 14*y + 7 - cdf(y)
result = fsolve(f, np.array([1,0])
print(result)
我得到以下结果:
array([ 0.51925928, 0.51925928])