Escribí el siguiente programa en Python 2 para hacer cálculos de métodos de Newton para mi conjunto de problemas matemáticos, y aunque funciona perfectamente, por razones sin que yo sepa, cuando inicialmente lo cargo en ipython con %run -i NewtonsMethodMultivariate.py
, la división de Python 3 no se importa. Lo sé porque después de cargar mi programa Python, ingresar x**(3/4)
da "1". Después de importar manualmente la nueva división, x**(3/4)
sigue siendo x**(3/4)
, como se esperaba. ¿Por qué es esto?Usando "desde __future__ división de importación" en mi programa, pero no está cargado con mi programa
# 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)
me gustaría utilizar Python 3 para evitar este problema, sino sólo mi distribución Linux barcos sympy para Python 2. Gracias a la ayuda cualquier persona puede proporcionar.
Además, en caso de que alguien se esté preguntando, aún no he generalizado este script para nxn Jacobianos, y solo tuve que lidiar con 2x2 en mi conjunto de problemas. Además, estoy cortando la matriz cero de 2x2 en lugar de usar el comando (Gracias eryksun para corregir mi notación, que ha solucionado el problema con la función de ceros.)zeros(2,1)
porque SymPy 0.7.1, instalado en mi máquina, se queja de que "ceros() toma exactamente un argumento", aunque wiki sugiere lo contrario. Quizás este comando sea solo para la versión de git.
Es 'ceros ((2,1))'; el argumento es un escalar o una tupla. ¿Evaluó la división inmediatamente después de la importación con 'print 1/2'? – eryksun
Por curiosidad, ¿qué sucede si agrega 'print division' al final de su programa? ¿Imprime algo así como: '_Feature ((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)'? Y si es así, ¿qué le da esa misma declaración de impresión desde la línea de comando de ipython? Tenga en cuenta que hay varias decenas de miles de resultados de Google para "ipython de la futura división de importación". Parece que no eres el primero en notar esto. :-) –
@eryksun Gracias por corregirme sobre mi uso del comando de ceros; He actualizado mi programa. Entonces, si abro ipython, ejecuto 'from __future__ import division', y luego' print 1/2', el resultado es 0.5, como se esperaba. Pero si en cambio, al abrir ipython y ejecutar '% run -i NewtonsMethodMultivariate.py', y luego' print 1/2', obtengo 0. La línea para importar la división de Python 3 está claramente en mi programa, así que No sé qué pasa. –