def netwon(f, J, p0, tol):
for i in range(1,51):
p = p0 - J(p0)/f(p0)
if la.norm(p - p0) < tol:
break
p0 = p
return p
def JJ(x):
J = np.identity(4)
u = sum(x)
for i in range(0,4):
for j in range(0,4):
J[i][j] = J[i][j] + ((np.e**(np.cos(u))) * (np.sin(u)))
return J
Выдает это сообщение об ошибке при вызове ньютона:
netwon(f, JJ, [2.5, 2, 1.4, 9], 1*10**-12)
-
ValueError Traceback (most recent call last)
<ipython-input-58-b80f7ad38c88> in <module>()
----> 1 netwon(f, JJ, [2.5, 2, 1.4, 9], 1*10**-12)
<ipython-input-44-ae7c3122a6cf> in netwon(f, J, p0, tol)
1 def netwon(f, J, p0, tol):
2 for i in range(1,51):
----> 3 p = p0 - (J(p0)/f(p0))
4 if la.norm(p - p0) < tol:
5 break
<ipython-input-53-17a5f32512be> in JJ(x)
4 for i in range(0,4):
5 for j in range(0,4):
----> 6 J[i][j] = J[i][j] + ((np.e**(np.cos(u))) * (np.sin(u)))
7 return J
ValueError: setting an array element with a sequence.
Я могу использовать JJ отлично:
JJ([2.5, 2, 1.4, 9])
array([[1.36222766, 0.36222766, 0.36222766, 0.36222766],
[0.36222766, 1.36222766, 0.36222766, 0.36222766],
[0.36222766, 0.36222766, 1.36222766, 0.36222766],
[0.36222766, 0.36222766, 0.36222766, 1.36222766]])
Может кто-нибудь заметить мою ошибку здесь, яНе понимаю, почему JJ может работать в одиночку, но приводит к ошибке при использовании внутри другой функции.
Спасибо