Я написал следующую программу на 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)
Я бы использовал Python 3, чтобы избежать этой проблемы, но мой дистрибутив Linux включает SymPy только для Python 2. Спасибо за помощь, которую может предоставить любой.
Кроме того, если кому-то интересно, я еще не обобщил этот сценарий для nxn якобианцев, и мне пришлось иметь дело только с 2x2 в моем наборе задач. Кроме того, я нарезаю нулевую матрицу 2x2 вместо использования команды (Спасибо eryksun за исправление моей записи, что устранило проблему с функцией нулей.)zeros(2,1)
, потому что SymPy 0.7.1, установленная на моем компьютере, жалуется, что "zeros() принимает ровно один аргумент", хотя wiki предполагает обратное. Возможно, эта команда предназначена только для версии git.
zeros((2,1))
; аргумент является либо скаляром, либо кортежем. Вы тестировали деление сразу после импорта с помощьюprint 1/2
? - person Eryk Sun   schedule 28.11.2011print division
в конец своей программы? Он печатает что-то вроде:_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)
? И если да, то что тот же оператор печати дает вам из командной строки ipython? Обратите внимание, что есть несколько десятков тысяч результатов Google для ipython из будущего отдела импорта. Кажется, вы не первый, кто это заметил. :-) - person Kirk Strauser   schedule 28.11.2011from __future__ import division
, а затемprint 1/2
, результат будет 0,5, как и ожидалось. Но если я вместо этого, открыв ipython и запустив%run -i NewtonsMethodMultivariate.py
, а затемprint 1/2
, я получаю 0. Строка для импорта подразделения Python 3 явно есть в моей программе, поэтому я не знаю, что случилось. - person Sara Fauzia   schedule 28.11.2011print division
в последнюю строку моей программы. Из командной строки я также получаю то же самое. - person Sara Fauzia   schedule 28.11.2011h
или рассматриваете возможность перехода на py3 вместо вводаx**(3/4.)
илиx**0.75
? - person John Machin   schedule 28.11.2011a
были дроби (которые жесткое кодированиеh
не исправило бы), и в первой итерации дроби в элементахa
дали лучшее решение. - person Sara Fauzia   schedule 28.11.2011