私は自分のニュートンラフソンアルゴリズムをPythonでsympy
とnumpy
を使って書いています。numpyで行列の方程式を解く
コードは以下の通りですが、あなたはこれを無視し、エラーへスキップすることができます。
CODE
def newtonRhapson(fncList, varz, x0):
jacob = []
for fnc in fncList:
vec = []
for var in varz:
res = fnc.diff(var)
for i in range(len(varz)):
res = res.subs(varz[i], x0[i])
vec.append(res)
jacob.append(numpy.array(vec, dtype='float64'))
fx0=[]
for fnc in fncList:
res2 = fnc
for i in range(len(varz)):
res2 = res2.subs(varz[i], x0[i])
fx0.append(res2)
j = jacob
f = fx0
print j
print ''
print f
print numpy.linalg.solve(j,f).tolist()
関数の引数は次のとおりです。
- PythonのリストSympy
記号を使用する関数の数:
varz
- これらの記号を含むリストは、(変数)
x0
- 我々print
j
とf
時点まで初期推測
ERROR
それが正常に動作し、次のように出力されます
[array([-9.13378682, -5.91269838]), array([ 4.84401379, 1.01980286])]
[-5.15598620617611, 5.13378681611922]
実行時:
しかしラインを実行している上:
print numpy.linalg.solve(j,f).tolist()
私はエラーを取得する:
File "/Users/me/anaconda/lib/python2.7/site- packages/numpy/linalg/linalg.py", line 384, in solve
r = gufunc(a, b, signature=signature, extobj=extobj)
TypeError: No loop matching the specified signature and casting was found for ufunc solve1
上に行ったように、あなたは単に
float64
ためdtype
仕様にnumpy.array
を追加することができます!どうもありがとう! –googlersのコメント - 間違ったデータ型を持つ多くのnumpy関数(これはnp.linalg.pinv(x)でしたが、xはオブジェクトdtypeが間違っています)と同じエラーです) – jeremycg