好的,所以我发现这个代码用于使用牛顿方法查找函数的根,但我需要一种方法将函数作为输入插入。我尝试了所有我知道的。
这是一个编程基础课程,所以它需要尽可能简单。非常感谢你的帮助。
修改
我需要的是让用户插入该功能。我不想让它成为代码的一部分。
有一个更明确的解释:
我需要输入提示,我要求用户提供功能(即“请插入你的功能:2 * x ** 2 + 6 * x + 12”)
和另一个函数的衍生物(即“请插入衍生物:4 * x + 6)
让程序找到与发布的一样的根,而不将它们作为正确代码的一部分。
注意:这是我第一次在这里发布并且编程不是我的区域,但我总是在这里找到答案。请耐心等待,谢谢你的帮助。
def dx(f, x):
return abs(0-f(x))
def newton_metodo(f, df, x0, e):
delta = dx(f, x0)
while delta > e:
x0 = x0 - f(x0)/df(x0)
delta = dx(f, x0)
print ('Raiz esta en: ', x0)
print ('f(x) en la raiz es: ', f(x0))
def f(x):
return 6*x**5-5*x**4-4*x**3+3*x**2
def df(x):
return 30*x**4-20*x**3-12*x**2+6*x
x0s = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 1]
for x0 in x0s:
newton_metodo(f, df, x0, 1e-5)
答案 0 :(得分:1)
请注意,您永远不应该在不受信任的用户输入上使用eval,并且永远不会在生产代码中使用eval!
def user_fn(user_function_string,**kwargs):
for key,val in kwargs.items():
user_function_string=user_function_string.replace("%s"%key,"%s"%val)
print "user fn:",user_function_string
#NOTE USING EVAL ON UNTRUSTED DATA IS A VERY VERY VERY BAD IDEA!!!!
return eval(user_function_string)
for i in range(3,8):
print (user_fn("2*x**2-1",x=i))
创建用户函数的更好方法是提示他们输入系数
即
if sys.version_info[0] >= 3: raw_input = input
order = int(raw_input("Enter Order of function (ie max power of x):"))
coefs = [int(raw_input("how many x**%d?"%i for i in range(order,-1,-1)]
def process_coefs(coefs,x):
return sum(n*x**i for i,n in coefs[::-1])
print(process_coefs(coefs,x=3))
print(process_coefs(coefs,x=5))