我基本上是想在这里求一个梯度的和,看看我附上的截图,有更好的想法。Rho是一个nx1输入向量,我附上的屏幕截图显示了3x1 Rho向量的想法,但它确实有一个未定义的长度。你知道吗
enter image description hereenter image description here
# JACOBIAN
def derivative(rho, a, A, tilde_k, x, y, vecinc, chi):
n = rho.shape[0]
result1 = np.array([n,1],complex)
result2 = np.array([n,1],complex)
result = np.array([n,1],complex)
u = np.zeros((n, 3))
W_tilde = np.array([3,3],complex)
loop1 = 0
loop2 = 0
for i in range(n):
for j in range(n):
u[i] = x[i] - y[j] # n x 3
W_tilde = A_matrix * chi.imag * A_matrix * G(u[i],k) * A_matrix # 3 x 3
ei_block = np.exp(1j * np.vdot(x[i], tilde_k)) * vecinc # 3 x 1
ej_block = np.exp(1j * np.vdot(x[j], tilde_k)) * vecinc # 3 x 1
eiT_block = np.matrix.getH(ei_block) # 1 x 3
mm = np.matmul(W_tilde, ej_block) # (3 x 3)(3 x 1) = 3 x 1
alpha_tilde = np.dot(eiT_block, mm) # (1 x 3)(3 x 1) = 1 x 1 = scalar
loop1 = loop1 + (2 * rho[i] * alpha_tilde * rho[j]) # scalar
if (i != j):
loop2 = loop2 + ((rho[j]**2) * alpha_tilde) # scalar
result1[i] = loop1
result2[i] = loop2
result = result1 + result2 # (n x 1) + (n x 1) = n x 1 vector
return result
对于该行,result1[I]=loop1,我得到“indexeror:index 2超出了大小为2的轴0的界限”。请帮忙:(
该错误意味着您正试图访问只有两个元素(大小2)的数组的第三个元素(索引2)。你知道吗
看起来你在用一种有趣的方式定义数组;
np.array([n,1],complex)
创建一个长度为2的数组,而不是n的数组。你想要的可能是np.zeros(n,complex)
,它将创建一个填充0的n长度数组相关问题 更多 >
编程相关推荐