Sympy微分,方程在numpy数组中?

问题描述 投票:0回答:1

我具有一个已更新的功能-我正在使用牛顿和最陡的方法进行优化。我是sympy的新手,并希望快速澄清一下。

x1,x2 = sym.symbols('x1 x2')
y = 2*x1 + 3*x2**2 + sym.exp(2*x1**2 + x2**2)
gy1 = sym.diff(y,x1)
gy2 = sym.diff(y,x2)

grad1 = sym.lambdify([x1,x2],gy1)(x[0],x[1])
grad2 = sym.lambdify([x1,x2],gy2)(x[0],x[1])
d = np.array([-1*grad1,-1*grad2])

l = sym.symbols('l')

theta = 2*(x[0]+l*d[0]) + 3*(x[1]+l*d[1])**2 + sym.exp(2*(x[0]+l*d[0])**2 + (x[1]+l*d[1])**2)

theta_p = sym.diff(theta,l)

我的函数,y更新如下:f(x_n)-> f(x_n + lambda * d_n)-称为theta(lambda)我已经如上所述进行了更新(“ theta”功能),并且在打印到屏幕上时,它给出了一个numpy数组:

array([-63.1124487914452*l + 2 + exp([1991.5905962264*(0.0316894691665188 - l)**2])],
      dtype=object)

这是我需要的等式,但现在我想对我的lambda l进行微分。但是sympy不能像这样工作。

我跑步时

sym.diff(theta,l)

我得到此输出:

AttributeError: 'ImmutableDenseNDimArray' object has no attribute 'as_coeff_Mul'

有什么想法吗?

python numpy sympy
1个回答
0
投票

尝试sym.diff(theta[0], l)sym.diff(theta[1], l)

由于某种原因,您最终得到的ndarray包含的对象是sympy表达式。打印每个元素的类型以确认。

哦,有嵌套的ndarray表达式。您需要查看传递给theta的内容。

© www.soinside.com 2019 - 2024. All rights reserved.