波大大12138 发表于 2021-8-14 14:17:39

py函数导数计算

想计算表达式f(x)=0.01*x**2+0.1*x的在x=5处的导数值?
书上给的代码是这样:
#导数计算
def numerical_diff(f, x):
    h = 1e-4#0.0001
    return ((f(x+h) - f(x-h)) / (2 * h))


#定义f(x)计算式
def function_1(x):
    return 0.01*x**2+0.1*x


print(numerical_diff(function_1, 5))

我的问题是1:((f(x+h) - f(x-h)) / (2 * h)),他这里的f(x+h)是怎么计算的,不应该先把x+h赋值给一个变量,调用 function_1来计算出f(x+h)吗,然后再次调用计算出f(x-h),最后再他这样也可以计算???
2:numerical_diff(function_1, 5),这里为什么调用带形参的函数,为什么可以不传 实参数?
后来我自己改了下代码,好理解的
#导数计算
def numerical_diff(x):
    h = 1e-4#0.0001
    #f(x+h)计算
    fxh1=function_1(x+h)
    # f(x-h)计算
    fxh2=function_1(x-h)
    return ((fxh1-fxh2)/(2*h))


# #定义f(x)计算式
def function_1(x):
   return 0.01*x**2+0.1*x


#计算该函数具体值
print(numerical_diff(5))

2012277033 发表于 2021-8-14 15:14:24

1、f(x+h)实际上就是function_1(x+h)而在function_1里面形参x就等于x+h
带入外面传进来的5这里就是 function_1(5+(1e-4)),所以在里面x就等于5+(1e-4)
在函数调用的时候,这里的算式结果就是实参。
2、这里numerical_diff(function_1,5)这里的function_1是不带括号的,所以传进去的是function_1这个方法,这里的处理方式相当于 f=function_1,x=5
这么说可能不好理解,看下这个例子吧:
def func(a):
    return a+1

a = func
b= func(2)

print(a)#<function func at 0x0119A730>这里就说明了,这里的a实际上就是函数func,所以可以这样子调用 a(1),这里a就相当于func 的另一个名字而已
print(b)#3 这里说明是b是执行了func后返回的数据。

波大大12138 发表于 2021-8-15 20:12:58

2012277033 发表于 2021-8-14 15:14
1、f(x+h)实际上就是function_1(x+h)而在function_1里面形参x就等于x+h
带入外面传进来的5这里就是 func ...

理解了,这里原来是传出的方法,谢谢
页: [1]
查看完整版本: py函数导数计算