来自 Fortran 代码的数学表达式

Mathematical expression from Fortran code

我想描述此语句(用 Fortran 编写)以便使用(数字)数学描述 (LaTeX)

计算特征值 srevals(1:3) 的 PDF
integer,parameter::eigenbins=100
integer,parameter::npdims=3
real,dimension(npdim)::srevals
real,dimension(eigenbins,npdim)::srevalspdf 
real::ray,hray 
integer::io,w

ray=20E-4
hray=ray/2
DO io=1,npdim
  DO w=1,eigenbin
    IF (       srevals(io) .GT. real(w-1)*ray/real(eigenbins)-hray &
       & .and. srevals(io) .LE. real(w  )*ray/real(eigenbins)-hray ) THEN
      srevalspdf(w,io)=srevalspdf(w,io)+1
      EXIT
    ENDIF
  ENDDO
ENDDO

我如何仅使用乳胶和一些句子来描述它?

N.B。我假设您的问题中有错别字,并且 eigenbineigenbins 是相同的,并且 npdimnpdims 是相同的.

简化代码

首先要注意的是 if 条件的主体(在数学上不是 Fortran)是

(w-1)*ray/eigenbins - ray/2 < srevals(io) <= w*ray/eigenbins - ray/2

因为 rayeigenbins 是正数,我们可以重新排列它给

w-1 < eigenbins*(srevals(io)/ray+0.5) <= w

这只有在

w = ceiling(eigenbins*(srevals(io)/ray+0.5))

这意味着你可以替换双循环

DO io=1,npdim
  DO w=1,eigenbin
    IF (       srevals(io) .GT. real(w-1)*ray/real(eigenbins)-hray &
       & .and. srevals(io) .LE. real(w  )*ray/real(eigenbins)-hray ) THEN
      srevalspdf(w,io)=srevalspdf(w,io)+1
      EXIT
    ENDIF
  ENDDO
ENDDO

单循环

DO io=1,npdim
  w = ceiling(eigenbins*(srevals(io)/ray+0.5))
  if (1 <= w .and. w <= eigenbins) then
    srevalspdf(w,io) = srevalspdf(w,io) + 1
  endif
ENDDO

物理意义

如果 srevals 是一个特征值数组,并且您在 -ray/2ray/2 之间有 eigenbins 个均匀间隔的 bin,您希望将这些特征值分组到其中,然后此代码创建数组 srevalspdf 记录每个特征值属于哪个 bin。假设您在此代码之前已将 srevalspdf 置零,如果特征值 io srevalspdf(w,io) 将是 1 ] 在 bin w 中,否则 0