使用Numpy或其他库对lambda sin函数进行求导

pbpqsu0x  于 2022-11-29  发布在  其他
关注(0)|答案(1)|浏览(125)

所以我有一个牛顿优化问题,我必须找到f'的值(x)和f“(x)其中x = 2.5且f = 2 * sin(x)─((x)**2/10)进行计算,但我尝试使用sympy和np.diff进行一阶和二阶导数,但没有线索,导致它不断出错,所以我返回使用手动导数,有任何线索如何派生函数f的帮助下,其他库,这里的代码

def Newton(x0):
  x = x0
  f = lambda x : 2 * np.sin (x) - ((x)**2/10)
  f_x0 = f(x0)
  #First Derivative
  f1 = lambda x : 2 * np.cos (x) - ((x)/5)
  f_x1 = f1(x0)
  #Second Derivative
  f2 = lambda x : -2 * np.sin (x) - (1/5)
  f_x2 = f2(x0)

  x1 = x0 - (f_x1/f_x2)
  x0 = x1

  return x,f_x0,f_x1,f_x2,x0

无需人工求一阶导数和二阶导数。

gev0vcfq

gev0vcfq1#

在您的情况下,可以使用scipy库计算导数,如下所示:

from scipy.misc import derivative

def f(x):
    return 2 * sin(x) - ((x)**2/10)

print("First derivative:" , derivative(f, 2.5, dx=1e-9))
print("Second derivative", derivative(f, 2.5, n=2, dx=0.02))

这里计算函数在x = 2.5处的一阶和二阶导数。
同样的方法也可以用sympy库来完成,有些人可能会发现这比上面的方法更容易。

from sympy import *

x = Symbol('x')
y = 2 * sin(x) - ((x)**2/10) #function
yprime = y.diff(x) #first derivative function
ydoubleprime = y.diff(x,2) #second derivative function

f_first_derivative = lambdify(x, yprime)
f_second_derivative = lambdify(x, ydoubleprime)

print("First derivative:" , f_first_derivative(2.5))
print("Second derivative",f_second_derivative(2.5))

相关问题