Sto scrivendo il mio algoritmo di Newton-Raphson in Python usando sympy
e numpy
.Errore di risoluzione dell'equazione di Matrix con numpy
Il codice è al di sotto, ma è possibile ignorare questa e saltare sul all'errore:
CODICE
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()
Gli argomenti della funzione sono:
fncList
- un elenco di pitone delle funzioni usando i simboli Sympy
varz
- una lista che contiene i simboli (variabili)
x0
- un'ipotesi iniziale
ERRORE
Fino al punto in cui siamo print
j
e f
funziona benissimo e stampa il seguente:
[array([-9.13378682, -5.91269838]), array([ 4.84401379, 1.01980286])]
[-5.15598620617611, 5.13378681611922]
quando corro:
newtonRhapson([5*cos(a)+6*cos(a+b)-10, 5*sin(a)+6*sin(a+b)-4], [a,b], [0.7,0.7])
Ma a correre la linea:
print numpy.linalg.solve(j,f).tolist()
ottengo l'errore:
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
Certo! Molte grazie! –
Un commento, per googler - Questo è lo stesso errore che si ottiene per molte funzioni di numpy, in cui si ha il tipo di dati errato (per me era un np.linalg.pinv (x), dove x era erroneamente un oggetto dtype) – jeremycg