首页 > 解决方案 > 求解一个隐函数,带小数的幂函数

问题描述

我想解决一个隐式函数,它包含幂函数并且索引存在小数。

我尝试通过scipy解决这个问题,但是它告诉我在power中遇到了无效值,我尝试通过sympy解决它,但是无论等待多长时间,它都无法输出答案。

这是隐式函数 https://imgur.com/o00dQYE

#####using scipy
from scipy.optimize import fsolve
import numpy as np

global Ccu, Czn, EC50Cu, EC50Zn, bCu, bZn

Ccu = 1
Czn = 1

EC50Cu = 0.000419
bCu = 0.2388
EC50Zn = 0.9319
bZn = 0.50946

def fomula(a):
    # return Ccu/(EC50Cu * (((100-RRE)/RRE)**(1/bCu))) - 1
    return Ccu/EC50Cu + Czn/EC50Zn * a ** (1/bCu-1/bZn) - a ** (1/bCu)

a = fsolve(fomula, 0)

print(a)


#####using sympy
from sympy import *
from sympy.parsing.sympy_parser import parse_expr

EC50Cu = 0.000419
bCu = 0.2388
EC50Zn = 0.9319
bZn = 0.50946

Ccu = 1
Czn = 1

x = Symbol('x')

s = solve(Ccu/EC50Cu + Czn/EC50Zn * x ** (1/bCu-1/bZn) - x ** (1/bCu),x)
print(N(s[0],10))

标签: pythonscipysympysolver

解决方案


import numpy as np

# input
Ccu,Czn = 1,1

EC50Cu = 0.000419
bCu = 0.2388
EC50Zn = 0.9319
bZn = 0.50946

# accuracy
acc = 0.001

for i in np.arange(1,99,acc):
    RRE = i
    a=Ccu/(EC50Cu * (((100-RRE)/RRE)**(1/bCu))) + Czn/(EC50Zn * (((100-RRE)/RRE)**(1/bZn)))
    if (a-1)>-acc and (a-1)<acc:
        print(i,a)

我知道 RRE 的范围,所以我只是遍历范围,并过滤我想要的答案。


推荐阅读