来自 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。我假设您的问题中有错别字,并且 eigenbin
和 eigenbins
是相同的,并且 npdim
和 npdims
是相同的.
简化代码
首先要注意的是 if
条件的主体(在数学上不是 Fortran)是
(w-1)*ray/eigenbins - ray/2 < srevals(io) <= w*ray/eigenbins - ray/2
因为 ray
和 eigenbins
是正数,我们可以重新排列它给
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/2
和 ray/2
之间有 eigenbins
个均匀间隔的 bin,您希望将这些特征值分组到其中,然后此代码创建数组 srevalspdf
记录每个特征值属于哪个 bin。假设您在此代码之前已将 srevalspdf
置零,如果特征值 io
srevalspdf(w,io)
将是 1
] 在 bin w
中,否则 0
。
我想描述此语句(用 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。我假设您的问题中有错别字,并且 eigenbin
和 eigenbins
是相同的,并且 npdim
和 npdims
是相同的.
简化代码
首先要注意的是 if
条件的主体(在数学上不是 Fortran)是
(w-1)*ray/eigenbins - ray/2 < srevals(io) <= w*ray/eigenbins - ray/2
因为 ray
和 eigenbins
是正数,我们可以重新排列它给
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/2
和 ray/2
之间有 eigenbins
个均匀间隔的 bin,您希望将这些特征值分组到其中,然后此代码创建数组 srevalspdf
记录每个特征值属于哪个 bin。假设您在此代码之前已将 srevalspdf
置零,如果特征值 io
srevalspdf(w,io)
将是 1
] 在 bin w
中,否则 0
。