Решите двойные производные внутри гессианской матрицы с симп - PullRequest
0 голосов
/ 07 октября 2019

Я задавал подобный вопрос раньше, но он никуда не ушел, и я был тогда менее способен объяснить свою проблему. В любом случае у меня есть матрица Гессе, подобная этой:

import sympy as sy

x1,x2,x3,x4,x5,x6,x7,x8,x9 = sy.symbols('x1 x2 x3 x4 x5 x6 x7 x8 x9',
                                        real=True)

V = sy.Function("V")(x1,x2,x3,x4,x5,x6,x7,x8,x9)
H = sy.hessian(V,[x1,x2,x3,x4,x5,x6,x7,x8,x9])

И я хочу проверить ее с помощью этой простой функции:

V_ = x1+x2+x3+x4+x5+x6+x7+x8**(-1)+x9**(-1)

Распечатав матричный элемент с уже решенным Derivative()Вот так:

H = H.subs(V,V_)

for i,j in enumerate(H):

    print(i+1)
    sy.pprint(sy.solve(j))

Я мало что знаю о решателях в sympy, и меня только смущает чтение документов. Я знаю, что dsolve работает только с простыми производными, поэтому я хотел знать, как я могу исключить Derivative() и просто получить «законченный» гессиан, в котором функция уже дифференцирована.

1 Ответ

0 голосов
/ 07 октября 2019

Использование doit:


In [8]: H.doit()                                                                                                                       
Out[8]: 
⎡0  0  0  0  0  0  0   0    0 ⎤
⎢                             ⎥
⎢0  0  0  0  0  0  0   0    0 ⎥
⎢                             ⎥
⎢0  0  0  0  0  0  0   0    0 ⎥
⎢                             ⎥
⎢0  0  0  0  0  0  0   0    0 ⎥
⎢                             ⎥
⎢0  0  0  0  0  0  0   0    0 ⎥
⎢                             ⎥
⎢0  0  0  0  0  0  0   0    0 ⎥
⎢                             ⎥
⎢0  0  0  0  0  0  0   0    0 ⎥
⎢                             ⎥
⎢                      2      ⎥
⎢0  0  0  0  0  0  0  ───   0 ⎥
⎢                       3     ⎥
⎢                     x₈      ⎥
⎢                             ⎥
⎢                           2 ⎥
⎢0  0  0  0  0  0  0   0   ───⎥
⎢                            3⎥
⎣                          x₉ ⎦
...