# -*- coding: utf-8 -*-
"""
Created on Sat Feb 29 14:56:52 2020
@author: 12064
"""
import numpy as np
k = 0
### size of function
n = 5
######## creating test function
A = np.random.randn(n,n)
B = np.transpose(A)
C = np.matmul(B,A) # A,B,C working
gradf = np.gradient(C, axis=0)
def myFcn(x):
return np.dot(C, x)
def gradientmyFcn(x):
return np.dot(gradf, x)
######## C = Q Rick defines
######## define the point
xT = np.random.randn((n))
x = xT.reshape((n,1))
print('myFcn(x)')
###### define gradient
#####initial alpha, c
###### define descent direction, and set of descent directions
p = np.zeros((n,1))
pT = np.zeros((1,n))
pT = gradientmyFcn(x)
pT.reshape(1,n)
p = np.transpose(pT)
p.reshape(n,1)
#P = {p[0]:p[k]}
#p[0] = gradf initial descent direction
def ArmijoLineSearch(alpha):
tao = .1
alpha = 1
c = 1.e-4
backtrack_factor = .5
gradfx = gradientmyFcn(x)
gradfx = gradfx
gradTx = np.transpose(gradfx)
xk1 = (x + (alpha*p))
check_step = np.dot(gradfx, p)
LessThan = myFcn(x) + (c*alpha)*check_step
if myFcn(xk1) > LessThan:
alpha = backtrack_factor * alpha
else:
if (np.transpose(mygradientFcn(xk1)) @ p) < tao * np.dot(np.transpose(gradfx), p):
print("weak curvature condition does not hold")
else:
return alpha
ArmijoLineSearch(alpha)
Ошибка в этой строке: if myFcn(xk1) > LessThan:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Я изо всех сил пытаюсь понять эту ошибку, так как она, кажется, принимает массивы numpy случайных чисел (по крайней мере, изначально случайный) и пытаюсь оперировать логическими значениями. В чем проблема и как ее исправить?