计算内部产品

时间:2017-04-19 18:03:16

标签: fortran linear-algebra

您好我正在尝试在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内积。只是内积的推广到第2级的张量,与第1级张量之间的乘积相同的行为

1 个答案:

答案 0 :(得分:1)

您是否正在尝试计算两个矩阵的内积?你能定义一下吗?

在任何情况下,如果你想计算Fortran的两个向量的内积,你可以写

<style>
tr.struck{background-color:#633;color:white;}
tr.eee{background-color:#EEE;color:#000;}
tr.fff{background-color:#FFF;color:#000;}
</style>
function doZebra(){
     var tTrCnt=0;
     $("##tblData tbody tr").each(function(){
         if($(this).css("display")!="none" && !$(this).hasClass("struck")){
             tTrCnt++;
             if(tTrCnt % 2) $(this).removeClass().addClass("eee");
             else  $(this).removeClass().addClass("fff");
         }
     });
}

其中,prod = sum( A * B ) A是定义了乘法的类型的一致数组(实数,复数等),B的变量相同类型。

如果prodA是一维的,则会计算其内部产品。我不知道它叫什么。

修改

根据您提供的定义(“Tr(A ^ \ dagger A)= A_ {ij} A ^ * _ {ij} = Tr(AA ^ \ dagger)”),您的界限有误。将内部产品放在一个单独的循环中

B

或使用

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 

没有循环。