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)) 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后返回的数据。
2012277033 发表于 2021-8-14 15:14
1、f(x+h)实际上就是function_1(x+h)而在function_1里面形参x就等于x+h
带入外面传进来的5这里就是 func ...
理解了,这里原来是传出的方法,谢谢
页:
[1]