Python求解非线性(超越)方程
我有一个方程 '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