使用x域

时间:2017-10-19 15:12:06

标签: python sympy

我试图找到方程组的根,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}]

使用任意改变的变量但功能相同!

1 个答案:

答案 0 :(得分:0)

得到了它。需要使用sympy函数而不是numpy函数...

e.g。

from sympy import exp, erf, log, pi

并替换为相应的numpy函数......