Python 用辛方法求特定点的雅可比矩阵

Python 用辛方法求特定点的雅可比矩阵,python,sympy,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,f1

我试图在(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
对应于

---> 16 J1=J(0,0)


我不确定,因为我不认识辛皮。您创建了以下函数:

J = Function('J')(x,y)
下一步,您将numpy数组指定给J:

J = np.array([[f1x,f1y],[f2x,f2y]])

您将numpy数组作为函数调用。

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

应使用Symphy表达式的
subs
方法计算点中的表达式(如中所述):

此外,您可能有兴趣了解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]])
J = sympy.Matrix([[f1x,f1y],[f2x,f2y]])
J.subs([(x,0), (y,0)])
>>> 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]])