I am writing my own Newton-Raphson algorithm in Python using sympy and numpy .
The code is below, but you can ignore this and go to the error:
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()
Function Arguments:
fncList - a list of python functions using sympy characters
varz - a list containing these characters (variables)
x0 - initial guess
MISTAKE
Until we reach print j and f , it works fine and prints the following:
[array([-9.13378682, -5.91269838]), array([ 4.84401379, 1.01980286])] [-5.15598620617611, 5.13378681611922]
when i run:
newtonRhapson([5*cos(a)+6*cos(a+b)-10, 5*sin(a)+6*sin(a+b)-4], [a,b], [0.7,0.7])
But when running the line:
print numpy.linalg.solve(j,f).tolist()
I get an error message:
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