首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python对数函数

Python对数函数
EN

Stack Overflow用户
提问于 2014-05-23 15:15:41
回答 3查看 8.6K关注 0票数 3

我正在寻找一个在Python中使用对数的操作示例。我试过了sympynumpy,但我仍然不能做我想做的事。例如,对于这样的输入:

代码语言:javascript
复制
log(x+1)+log(4-x)=log(100) # it's just an example 

输出应该给出x值。我需要用log(x+1)=4log(x)-log(x+1)=log(x)这样的其他函数来完成这个任务。

有没有什么方法或地方(文档或类似的)可以找到如何做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-23 17:15:10

我可能误解了你需要做的事,因为你说你已经试过同情了。但是,看起来你只是想用代数方程来解x。

解方程中的x

代码语言:javascript
复制
log(x+1)+log(4-x)=log(100)

使用同情将是

代码语言:javascript
复制
>>> from sympy import Symbol, solve, log
>>> x = Symbol('x')
>>> solve(log(x+1) + log(4-x) - log(100), x)
[3/2 - 5*sqrt(15)*I/2, 3/2 + 5*sqrt(15)*I/2]

如果需要,可以检查这两种解决方案在numpy中是否正确。

代码语言:javascript
复制
>>> import numpy as np
>>> a = 3/2 - 5*np.sqrt(15)*1j/2
>>> b = 3/2 + 5*np.sqrt(15)*1j/2
>>> np.log(a + 1) + np.log(4-a)
(4.6051701859880918+0j)
>>> np.log(b + 1) + np.log(4-b)
(4.6051701859880918+0j)
>>> np.log(100)
4.6051701859880918

这不是你要找的吗?

票数 9
EN

Stack Overflow用户

发布于 2014-05-23 15:25:37

因为log是一个非线性函数,所以您需要使用像scipy.optimize.fsolve这样的非线性求解器。它接受一个函数和一个猜测值,并以数组的形式返回答案。出于简单的原因,我将函数定义为lambda函数,因为我们不需要它在这一行之外,但是使用标准的def方法创建函数也是可行的。后端的[0]从数组中获取值,只返回浮点数。

代码语言:javascript
复制
import scipy.optimize
import math

scipy.optimize.fsolve(lambda x: math.log(x+1) - 4, 5)[0] # 5 is guess value
>>> 53.598
# Check
math.exp(4) - 1
>>> 53.598
票数 1
EN

Stack Overflow用户

发布于 2014-05-23 19:49:26

已经给出了好的建议。我只是注意到,您也可以在SymPy中检查答案。

代码语言:javascript
复制
>>> L, R = log(x+1)+log(4-x), log(100)
>>> eq = Eq(L, R)
>>> eq
log(-x + 4) + log(x + 1) == log(100)
>>> sol = solve(eq)
>>> [eq.subs(x, i) for i in sol]
[True, True]

因此,在Eq形式下,解是自动验证的。这并不总是正确的,但是可以使用数值计算来检查值:

代码语言:javascript
复制
>>> f = eq.lhs - eq.rhs; f
log(-x + 4) + log(x + 1) - log(100)
>>> f.subs(x, sol[0])
-log(100) + log(5/2 - 5*sqrt(15)*I/2) + log(5/2 + 5*sqrt(15)*I/2)
>>> _.n()
0.e-124 + 0.e-125*I
>>> f.subs(x, sol[0]).n(chop=True)  # the small numbers can be chopped
0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23832864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档