我在Python 2中编写了以下程序来为我的数学问题集进行牛顿方法计算,虽然它完美地工作,但是出于我不知道的原因,当我最初在ipython中加载它时%run -i NewtonsMethodMultivariate.py,不会导入Python 3除法.我知道这是因为在加载我的Python程序后,输入x**(3/4)"1".手动导入新分区后,按预期x**(3/4)保留x**(3/4).为什么是这样?
# coding: utf-8
from __future__ import division
from sympy import symbols, Matrix, zeros
x, y = symbols('x y')
X = Matrix([[x],[y]])
tol = 1e-3
def roots(h,a):
def F(s):
return h.subs({x: s[0,0], y: s[1,0]})
def D(s):
return h.jacobian(X).subs({x: s[0,0], y: s[1,0]})
if F(a) == zeros((2,1)):
return a
else:
while (F(a)).norm() > tol:
a = a - ((D(a))**(-1))*F(a)
print a.evalf(10)
Run Code Online (Sandbox Code Playgroud)
我会使用Python 3来避免这个问题,但是我的Linux发行版只提供SymPy for Python 2.感谢任何人都能提供的帮助.
另外,如果有人想知道,我还没有为nxn Jacobians推广这个脚本,只需要在我的问题集中处理2x2.另外,我正在切换2x2零矩阵而不是使用命令,zeros(2,1) …