嗨,我正在尝试计算Fortran中的内部产品。我在下面提供示例代码,并说明我将获得的输出以及预期的输出。代码本身没有任何错误编译,但是我获得的输出不是我期望的。我认为无法正确编码内部产品。代码在下面。
编辑:我根据以下评论中获得的帮助编辑了代码。
program
integer :: i,j
integer, parameter :: nx = 10, ny = 10
complex, dimension(-nx:nx,-ny:ny) :: A,v
real :: B
B = 0.0
do j = -ny+1,ny-1
do i = -nx+1,nx-1
A(i,j) = v(i+1,j)+v(i-1,j)+v(i,j+1)+v(i,j-1)-4*v(i,j)
B = B + conjg(A(i,j))*A(i,j) !computing the inner product
end do
end do
print *, 'Result of the inner product of A with itself', B
end program
我现在正确计算内部产品吗?谢谢。
注意:矩阵产物的痕迹是内部产品,例如Frobenius Inner产品。仅将内部产物的概括为等级2的张量,与等级1张量之间的乘积相同
您是否试图计算两个矩阵的内部产品?你能定义吗?
在任何情况下,如果要计算两个向量的内部产品,如果fortran,您可以写
prod = sum( A * B )
其中, A
和 B
是定义乘法(真实,复杂等(的类型的合格数组,而 prod
是 same same same type的变量。
如果A
和B
是一维,则计算其内部产品。我不知道该怎么称呼。
编辑
基于您提供的定义(" tr(a^ dagger a(= a_ {ij} a^*_ {ij} = tr(aa^ dagger("(,您的界限错误。将内部产物与
单独的循环中do i = -nx,nx
do j = -ny,ny
B = B + conjg(A(i,j))*A(i,j) !computing the inner product
end do
end do
或使用
B = sum( conjg(A)*A )
没有循环。