输入文件中的最大值和最小值

时间:2018-10-21 07:37:27

标签: fortran max minimum

首先,我已经编写了这段代码,并且运行良好。

      program test
      implicit none
      integer i,n
      real dl, lambda
      real tr, top, bot
      integer, parameter :: imax = 1e4
      real wl(50), f(50)
      character infile*15, outfile*15

      n=25
      open(15,file='t1.txt')
      open(16,file='out.txt')
      do i = 1, n
      read(15,*,end=100) wl(i), f(i)
      enddo

100   continue
      close(15)

      top = 0
      bot = 0
      dl = (wl(n) - wl(1)) / real(imax)


      do i = 0, imax-1
            lambda = wl(1) + dl*i
            call linear(lambda,wl,f,n,tr)
            top = top + lambda*tr*dl
            bot = bot + tr*dl
      enddo

      write(16,*) top/bot 
      stop
      end




      subroutine linear(xp,wl,f,n,yp)
      implicit none
      intent (in) :: xp,wl,f,n
      intent (out) :: yp
      integer, parameter :: imax = 1e4
      real wl(50), f(50) 
      real xp,yp
      integer i,n



      do 10 i=1, n-1
            if (xp .ge. wl(i) .and. xp .lt. wl(i+1)) then
            yp = f(i)+((f(i+1)-f(i))/(wl(i+1)-wl(i)))*(xp-wl(i))
            endif
10    enddo
      return
      end subroutine

此代码的作用是首先从t1.txt中读取数据并应用插值,

然后使用这些插值数据执行集成。

例如,wl(25)是最大值,而wl(1)是最小值。

通过使用最小值和最大值,我可以找到dl。

因此代码运行良好,没有任何错误。

(顺便说一句,在子例程中,我使用wl(50)和f(50)的原因是我只是随机声明了大于25的数据量,即t1.txt的行数)

但是,问题是我还有其他输入文件,例如t2.txt,t3.txt等。

文件的数据数量不同,这意味着

t1.txt具有25行wl和f

t2.txt有27行

...等等

要使集成部分适用于其他文件,我需要代码来查找最大数量 和最小wl自动将其分别应用于wl(n)和wl(1)。

因此,无论文件有多少行,集成部分都将始终有效。 (换句话说,我不必说n = 25的最大值,而用wl(1)的最小值)

我知道有一些可以找到最大值的东西,例如maxval(a), 但我认为我无法将其应用于此代码。

如果适合我想做的事,如何使用maxval?

0 个答案:

没有答案