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

0 投票
2 回答
1878 浏览
提问于 2025-05-01 09:16

我有一个方程 'a*x+logx-b=0'(a和b是常数),我想求出x的值。问题是我有很多常数a(相应地也有很多b)。我该如何用Python来解决这个方程呢?

暂无标签

2 个回答

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
1

你可以看看这个链接:

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

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

撰写回答