我试图找到方程组的根,2个变量(mu,sig):
import numpy as np
from scipy.special import erf
from sympy.solvers import nsolve
from sympy import Symbol
import mpmath
bins = [0.09,0.2]
power = [1.3,1.5]
def CDF(x,sig,mu):
return(0.5+0.5*erf((np.log(x)-mu)/(2*np.pi*sigma)))
def findRoots(power,bins):
mu = Symbol('x1')
sig = Symbol('x2')
f1 = CDF(np.exp(mu) + bins[0],mu,sig) - CDF(0,mu,sig) - power[0]
f2 = CDF(np.exp(mu) + bins[1],mu,sig) - CDF(np.exp(mu) + bins[2],mu,sig) - power[1]
print(nsolve((f1,f2),(mu,sig),(0.6,0.1)))
这会出现以下错误消息:
f1 = CDF(np.exp(mu) + bins[0],mu,sig) - CDF(0,mu,sig) - power[0]
AttributeError: 'Symbol' object has no attribute 'exp'
因此,对于在' x'中添加一个变量感到不安。域。
有没有办法规避这个?
在mathematica中,这看起来像这样:
f1=0.1;d1=0.3;
f2=0.2;d2=0.2;
FindRoot[{NIntegrate[PDF[LogNormalDistribution[mu,sig],x],{x,0,Exp[mu]+exp[f1]}]==d1,NIntegrate[PDF[LogNormalDistribution[mu,sig],x],{x,Exp[mu]+exp[f1],Exp[mu]+exp[f2]}]==d2},{mu,0.01,5}{sig,0.01,5}]
使用任意改变的变量但功能相同!
答案 0 :(得分:0)
e.g。
from sympy import exp, erf, log, pi
并替换为相应的numpy函数......