计算内积
Computing Inner Product
您好,我正在尝试用 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 product.just将内积推广到2阶张量,作用与1阶张量之间的乘积相同
您要计算两个矩阵的内积吗?你能定义一下吗?
在任何情况下,如果你想计算两个向量的内积,如果是 Fortran,你可以这样写
prod = sum( A * B )
其中,A
和 B
是定义了乘法(实数、复数等)类型的一致数组,prod
是 相同类型。
如果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 )
没有循环。
您好,我正在尝试用 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 product.just将内积推广到2阶张量,作用与1阶张量之间的乘积相同
您要计算两个矩阵的内积吗?你能定义一下吗?
在任何情况下,如果你想计算两个向量的内积,如果是 Fortran,你可以这样写
prod = sum( A * B )
其中,A
和 B
是定义了乘法(实数、复数等)类型的一致数组,prod
是 相同类型。
如果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 )
没有循环。