我想运行两个函数,f(x)和g(x),x = 0到1000
我的目标是找出x的哪个值使f和g截距。
所以,while f(x) != g(x)
我想继续跑。
当f(x) = g(x)
我希望循环停止,并返回x
的值时。
My problem:
x不一定是整数。实际上,在我的情况下,我必须处理许多小数。
是否有一种聪明的方法可以找出允许出现错误的x的近似浮点值?
谢谢!
答案 0 :(得分:2)
如果您想将f(x)
和g(x)
的回报与某些容差进行比较,您可以这样做:
if abs(f(x) - g(x)) < tolerance:
而不是
if f(x) == g(x):
答案 1 :(得分:1)
使用round
功能并将其转换为整数使用
>>> int(round(2.56))
3
或者您可以使用Decimal
模块:
from decimal import *
getcontext().prec = 5
x = Decimal(22)/ Decimal(7)
print x
#3.1429
在此示例中,您可以为已分配精确到5个小数位,
getcontext().prec
到5
答案 2 :(得分:1)
如果您想查找将f(x)
与g(x)
进行比较的拦截是一种不好的方法,因为相邻步骤之间的变化总是太大而无法在您的容忍范围内检测到这么小,你会发现你应该找到一个拦截。
相反,您应该查找f(x)
和g(x)
的相对位置发生变化的点,即从f(x) >= g(x)
到f(x) < g(x)
或副的位置反之亦然。跟踪先前的状态应该允许您找到所有拦截点。
(注意:这假设f(x)
和g(x)
都是连续函数,因为使用不连续函数可以在不截断的情况下反转位置。
当然,你希望以最好的方式做到这一点,你最好使用现有的许多经过充分测试的数字root-finding algorithms中的一个。