使用sympy在特定点评估雅可比行列式

Chi*_*Rai 4 python sympy

我试图在(x,y)=(0,0)处评估雅可比行列式,但无法这样做.

import sympy as sp
from sympy import *
import numpy as np
x,y=sp.symbols('x,y', real=True)
J = Function('J')(x,y)
f1=-y
f2=x - 3*y*(1-x**2)
f1x=diff(f1,x)
f1y=diff(f1,y)
f2x=diff(f2,x)
f2y=diff(f2,y)
J=np.array([[f1x,f1y],[f2x,f2y]])
J1=J(0,0)
print J1
Run Code Online (Sandbox Code Playgroud)

对应的错误

---> 16 J1=J(0,0)
Run Code Online (Sandbox Code Playgroud)

TypeError: 'numpy.ndarray' object is not callable 
Run Code Online (Sandbox Code Playgroud)

Oli*_* W. 14

你得到的错误确实是因为你正在重新绑定 J到一个不可调用的numpy数组.

您应该使用subssympy表达式的方法来评估某个点的表达式(如Sympy基本操作文档中所述):

J = sympy.Matrix([[f1x,f1y],[f2x,f2y]])
J.subs([(x,0), (y,0)])
Run Code Online (Sandbox Code Playgroud)

此外,您可能有兴趣知道sympy也提供了一种jacobian方法:

>>> F = sympy.Matrix([f1,f2])
>>> F.jacobian([x,y])
Matrix([
[        0,         -1],
[6*x*y + 1, 3*x**2 - 3]])
>>> F.jacobian([x,y]).subs([(x,0), (y,0)])
Matrix([
[0, -1],
[1, -3]])
Run Code Online (Sandbox Code Playgroud)


mer*_*tah 1

我不确定,因为我不知道同情。您创建的函数:

J = Function('J')(x,y)
Run Code Online (Sandbox Code Playgroud)

下一步将 numpy 数组分配给 J:

J = np.array([[f1x,f1y],[f2x,f2y]])
Run Code Online (Sandbox Code Playgroud)

您将 numpy 数组称为函数。