本文整理汇总了Python中sympy.matrices.Matrix.jacobian方法的典型用法代码示例。如果您正苦于以下问题:Python Matrix.jacobian方法的具体用法?Python Matrix.jacobian怎么用?Python Matrix.jacobian使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sympy.matrices.Matrix
的用法示例。
在下文中一共展示了Matrix.jacobian方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: msolve
# 需要导入模块: from sympy.matrices import Matrix [as 别名]
# 或者: from sympy.matrices.Matrix import jacobian [as 别名]
def msolve(args, f, x0, tol=None, maxsteps=None, verbose=False, norm=None,
modules=['mpmath', 'sympy']):
"""
Solves a nonlinear equation system numerically.
f is a vector function of symbolic expressions representing the system.
args are the variables.
x0 is a starting vector close to a solution.
Be careful with x0, not using floats might give unexpected results.
Use modules to specify which modules should be used to evaluate the
function and the Jacobian matrix. Make sure to use a module that supports
matrices. For more information on the syntax, please see the docstring
of lambdify.
Currently only fully determined systems are supported.
>>> from sympy import Symbol, Matrix
>>> x1 = Symbol('x1')
>>> x2 = Symbol('x2')
>>> f1 = 3 * x1**2 - 2 * x2**2 - 1
>>> f2 = x1**2 - 2 * x1 + x2**2 + 2 * x2 - 8
>>> msolve((x1, x2), (f1, f2), (-1., 1.))
[-1.19287309935246]
[ 1.27844411169911]
"""
if isinstance(f, (list, tuple)):
f = Matrix(f).T
if len(args) != f.cols:
raise NotImplementedError('need exactly as many variables as equations')
if verbose:
print 'f(x):'
print f
# derive Jacobian
J = f.jacobian(args)
if verbose:
print 'J(x):'
print J
# create functions
f = lambdify(args, f.T, modules)
J = lambdify(args, J, modules)
# solve system using Newton's method
kwargs = {}
if tol:
kwargs['tol'] = tol
if maxsteps:
kwargs['maxsteps'] = maxsteps
kwargs['verbose'] = verbose
if norm:
kwargs['norm'] = norm
x = newton(f, x0, J, **kwargs)
return x
示例2: nsolve
# 需要导入模块: from sympy.matrices import Matrix [as 别名]
# 或者: from sympy.matrices.Matrix import jacobian [as 别名]
def nsolve(*args, **kwargs):
"""
Solve a nonlinear equation system numerically.
nsolve(f, [args,] x0, modules=['mpmath'], **kwargs)
f is a vector function of symbolic expressions representing the system.
args are the variables. If there is only one variable, this argument can be
omitted.
x0 is a starting vector close to a solution.
Use the modules keyword to specify which modules should be used to evaluate
the function and the Jacobian matrix. Make sure to use a module that
supports matrices. For more information on the syntax, please see the
docstring of lambdify.
Overdetermined systems are supported.
>>> from sympy import Symbol, nsolve
>>> import sympy
>>> sympy.mpmath.mp.dps = 15
>>> x1 = Symbol('x1')
>>> x2 = Symbol('x2')
>>> f1 = 3 * x1**2 - 2 * x2**2 - 1
>>> f2 = x1**2 - 2 * x1 + x2**2 + 2 * x2 - 8
>>> print nsolve((f1, f2), (x1, x2), (-1, 1))
[-1.19287309935246]
[ 1.27844411169911]
For one-dimensional functions the syntax is simplified:
>>> from sympy import sin, nsolve
>>> from sympy.abc import x
>>> nsolve(sin(x), x, 2)
3.14159265358979
>>> nsolve(sin(x), 2)
3.14159265358979
mpmath.findroot is used, you can find there more extensive documentation,
especially concerning keyword parameters and available solvers.
"""
# interpret arguments
if len(args) == 3:
f = args[0]
fargs = args[1]
x0 = args[2]
elif len(args) == 2:
f = args[0]
fargs = None
x0 = args[1]
elif len(args) < 2:
raise TypeError("nsolve expected at least 2 arguments, got %i" % len(args))
else:
raise TypeError("nsolve expected at most 3 arguments, got %i" % len(args))
modules = kwargs.get("modules", ["mpmath"])
if isinstance(f, (list, tuple)):
f = Matrix(f).T
if not isinstance(f, Matrix):
# assume it's a sympy expression
if isinstance(f, Equality):
f = f.lhs - f.rhs
f = f.evalf()
atoms = f.atoms(Symbol)
if fargs is None:
fargs = atoms.copy().pop()
if not (len(atoms) == 1 and (fargs in atoms or fargs[0] in atoms)):
raise ValueError("expected a one-dimensional and numerical function")
# the function is much better behaved if there is no denominator
f = f.as_numer_denom()[0]
f = lambdify(fargs, f, modules)
return findroot(f, x0, **kwargs)
if len(fargs) > f.cols:
raise NotImplementedError("need at least as many equations as variables")
verbose = kwargs.get("verbose", False)
if verbose:
print "f(x):"
print f
# derive Jacobian
J = f.jacobian(fargs)
if verbose:
print "J(x):"
print J
# create functions
f = lambdify(fargs, f.T, modules)
J = lambdify(fargs, J, modules)
# solve the system numerically
x = findroot(f, x0, J=J, **kwargs)
return x