使用Python

时间:2016-08-25 14:39:45

标签: python

为了提出这个问题,我明白可以做得更好。但这是我的一个问题,我必须这样做。我们不能使用任何内置函数或包。

我需要编写一个函数来使用有限差分来近似给定函数的二阶导数的数值。我们正在使用的功能如下。

2nd Derivative Formula(我将登录信息丢失到我的旧帐户,因此请原谅我缺少积分而且无法包含图片。)

我的问题是:

我不明白如何让python函数接受它要导出的输入函数。如果有人输入了输入2nd_deriv(2x**2 + 4, 6),我不明白如何在6时评估2x ^ 2.

如果不清楚,请告诉我,我可以再试一次。 Python对我来说是新的,所以我只是弄湿了脚。

由于

2 个答案:

答案 0 :(得分:3)

您可以将该功能传递给任何其他“变量”:

def f(x):
    return 2*x*x + 4

def d2(fn, x0, h):
    return (fn(x0+h) - 2*fn(x0) + fn(x0-h))/(h*h)

print(d2(f, 6, 0.1))

答案 1 :(得分:0)

你不能传递文字表达,你需要一个函数(或一个lambda)。

def d2(f, x0, h = 1e-9):
   func = f
   if isinstance(f, str):
      # quite insecure, use only with controlled input
      func = eval ("lambda x:%s" % (f,))
   return (func(x0+h) - 2*func(x0) + func(x0-h))/(2*h)

然后使用它

def g(x):
   return 2*x**2 + 4

# using explicit function, forcing h value
print d2(g, 6, 1e-10)

或直接:

# using lambda and default value for h
print d2(lambda x:2x**2+4, 6)

修改

  • 已更新,以考虑f可以是字符串或函数