如何让用户定义函数 - Python - Bisection Method

时间:2018-04-02 13:50:28

标签: python numerical-methods

我编写了以下代码,使用二分法找到方程的根。

def f(x):
    return x**3-5

#computes f(x) intercept with the bisection method
#err - a small floating number that tells you your accuracy
def bisection(low, high, err):
    mid = (high+low)/2   

    while(abs(f(mid)) > err):
        print ('low =', low, 'high =', high, 'mid= ', mid)
        if f(mid) > 0:
            high = mid
        elif f(mid) < 0:
            low = mid
        mid = (high + low)/2
    return mid

print (bisection(0, 100, 0.001))

代码执行方法没有问题。但是,我想找到一种方法来提示用户输入他们自己的方程式来解决而不是已经预先编程。

我感谢您的任何意见。

非常感谢你的帮助!

3 个答案:

答案 0 :(得分:1)

from sympy import *
eqn=sympify(input('Eqn'))
f=lambda x:eqn.subs({'x':x})

答案 1 :(得分:0)

您可以提示用户输入多项式的系数:

print('a x^3 + b x^2 + c x + d')
a = input('>a')
b = input('>b')
c = input('>c')
d = input('>d')

然后将其输入函数:

def f(x, a, b, c, d):
     return a*x**3 + b*x**2 + c * x + d

更好的方法(从@SmartManoj的回答继续):

from sympy import *
equation = input('Your equation > ')
eqn=sympify(equation)
f=lambda x:eqn.subs({'x':x})

如果您使用的是python 2,请改用raw_input('Your equation > ')

答案 2 :(得分:0)

没有必要使用Sympy,eval是原生的。

def f(expr, x)
  return eval(expr)

for i in range(10):
  print f("x * x", i)