Ho scritto il seguente programma in Python 2 per fare calcoli di metodo di Newton per il mio problema di matematica impostato, e mentre funziona perfettamente, per motivi a mia insaputa, quando inizialmente lo carico in ipython con %run -i NewtonsMethodMultivariate.py
, la divisione Python 3 non viene importata. Lo so perché dopo aver caricato il mio programma Python, inserendo x**(3/4)
da "1". Dopo aver importato manualmente la nuova divisione, quindi x**(3/4)
rimane x**(3/4)
, come previsto. Perchè è questo?Uso "da __future__ import division" nel mio programma, ma non è caricato con il mio programma
# 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)
userei Python 3 per evitare questo problema, ma solo la mia distribuzione Linux navi SymPy per Python 2. Grazie all'aiuto chiunque può fornire.
Inoltre, nel caso qualcuno si stia chiedendo, non ho ancora generalizzato questo script per nxn Jacobians, e ho dovuto gestire solo 2x2 nel mio set di problemi. Inoltre, sto tagliando la matrice 2x2 zero invece di usare il comando (Grazie eryksun per correggere la mia notazione, che ha fissato il problema con la funzione di zeri.)zeros(2,1)
perché SymPy 0.7.1, installato sulla mia macchina, si lamenta che "zeros() richiede esattamente un argomento", sebbene il wiki suggerisca diversamente. Forse questo comando è solo per la versione git.
È 'zeros ((2,1))'; l'argomento è uno scalare o una tupla. Hai testato la divisione subito dopo l'importazione con 'print 1/2'? – eryksun
Per curiosità, cosa succede se aggiungi 'print division' alla fine del tuo programma? Stampa qualcosa del tipo: '_Feature ((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)'? E se sì, che cosa ti dà la stessa istruzione di stampa dalla riga di comando ipython? Tieni presente che ci sono diverse decine di migliaia di risultati di Google per "ipython dalla futura divisione di importazione". Sembra che tu non sia il primo a notare questo. :-) –
@eryksun Grazie per avermi corretto sull'utilizzo del comando zeri; Ho aggiornato il mio programma. Quindi se apro ipython, eseguo 'da __future__ import division', e quindi' print 1/2', il risultato è 0.5, come previsto. Ma se invece, aprendo ipython ed eseguendo '% run -i NewtonsMethodMultivariate.py', e poi' print 1/2', ottengo 0. La riga per importare la divisione Python 3 è chiaramente nel mio programma, quindi non so cosa succede –