这是我的密码:
def obj_function(x):
val= 8*(x[0]**4) + 3*(x[1]**2)- 6*x[0]*x[1] + 2*x[1]
return np.asmatrix(val)
def obj_function_prime(x):
val=[32*(x[0]**3)-6*x[1], 6*x[1]-6*x[0]+2]
return np.asmatrix(val)
def hess_obj_function(x):
a= 96*(x[0]**2)
b= -6
c= -6
d= 6
val=[[a,b], [c,d]]
return np.asmatrix(val)
tol= 10**(-6)
mu= 0.2
xk= np.asmatrix([1,1])
xold= np.asmatrix([0,0])
while np.linalg.norm(obj_function_prime(xk))> tol:
xold=xk
alpha=1.0
while obj_function(xk- alpha*obj_function_prime(xk))> (obj_function(xk)- mu*alpha*np.dot(obj_function_prime(xk), obj_function(xk))):
alpha=0.5* alpha
xk= xk-alpha*obj_function_prime(xk)
print(" The minimum of the function occurs at", xk)
这给了我一个错误:
*
LinAlgError Traceback (most recent call last) in 20 xold= np.matrix([0,0]) 21 ---> 22 while np.linalg.norm(obj_function_prime(xk))> tol: 23 xold=xk 24 alpha=1.0
<ipython-input-3-c0704e734bdd> in obj_function_prime(x) 4 5 def obj_function_prime(x): ----> 6 val=[32*(x[0]**3)-6*x[1], 6*x[1]-6*x[0]+2] 7 return np.matrix(val) 8 ~\anaconda3\lib\site-packages\numpy\matrixlib\defmatrix.py in __pow__(self, other) 231 232 def __pow__(self, other): --> 233 return matrix_power(self, other) 234 235 def __ipow__(self, other): <__array_function__ internals> in matrix_power(*args, **kwargs) ~\anaconda3\lib\site-packages\numpy\linalg\linalg.py in matrix_power(a, n) 620 a = asanyarray(a) 621 _assert_stacked_2d(a) --> 622 _assert_stacked_square(a) 623 624 try: ~\anaconda3\lib\site-packages\numpy\linalg\linalg.py in _assert_stacked_square(*arrays) 211 m, n = a.shape[-2:] 212 if m != n: --> 213 raise LinAlgError('Last 2 dimensions of the array must be square') 214 215 def _assert_finite(*arrays): LinAlgError: Last 2 dimensions of the array must be square
这个错误是什么意思?我如何解决它?如果矩阵不是这样定义的,我如何将其转换为平方矩阵
使用
np.matrix
会导致问题让我们制作一个小矩阵:
请注意,当您为它编制索引时,它不会更改。它选择第一个“行”,但作为
np.matrix
仍然是2d而且{}的{}是矩阵平方,实际上{}
我不打算试图弄清楚您想要做什么,但显然,使用
asmatrix
不是一个好办法——至少在不了解这种数组的行为的情况下是这样相关问题 更多 >
编程相关推荐