私はPython2で次のプログラムを作成して、数学の問題セットに対してニュートン法の計算を行いました。これは完全に機能しますが、私にはわからない理由で、最初にipythonにロードしたときに、Python3%run -i NewtonsMethodMultivariate.py
の分割がインポートされません。x**(3/4)
Pythonプログラムをロードした後、 「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)
この問題を回避するためにPython3を使用しますが、私のLinuxディストリビューションにはPython2用のSymPyしか出荷されていません。誰もが提供できる支援に感謝します。
また、誰かが疑問に思っている場合に備えて、私はまだnxn Jacobians用にこのスクリプトを一般化しておらず、問題セットで2x2を処理するだけで済みました。さらに、私のマシンにインストールされているSymPy 0.7.1は、「zeros()は正確に1つの引数を取る」と文句を言うので、コマンドを使用する代わりに2x2のゼロ行列をスライスしています。たぶん、このコマンドはgitバージョン専用です。(ゼロ関数の問題を修正した表記を修正してくれたeryksunに感謝します。)zeros(2,1)