Python解决非线性(超越)方程

时间:2014-11-03 18:59:39

标签: python solver nonlinear-functions equations

我有一个等式' a * x + logx-b = 0,(a和b是常数)',我想解决x。问题是我有很多常数a(因此很多b)。如何使用python解决这个等式?

2 个答案:

答案 0 :(得分:1)

您可以查看类似

的内容

http://docs.scipy.org/doc/scipy-0.13.0/reference/optimize.nonlin.html

具有专门为这些方程设计的工具。

答案 1 :(得分:0)

很酷 - 今天我学习了Python的数值求解器。

from math import log
from scipy.optimize import brentq

def f(x, a, b):

    return a * x + log(x) - b


for a in range(1,5):
    for b in range(1,5):
        result = brentq(lambda x:f(x, a, b), 1e-10, 20)
        print a, b, result

brentq提供函数穿过x轴的估计值。你需要给它两点,一点肯定是负面的,一点肯定是正面的。对于负点,选择小于exp(-B)的数字,其中B是b的最大值。对于正点,请选择大于B的数字。

如果无法预测b值的范围,则可以使用求解器。这可能会产生一个解决方案 - 但这不能保证。

from scipy.optimize import fsolve


for a in range(1,5):
    for b in range(1,5):
        result = fsolve(f, 1, (a,b))
        print a, b, result