максимальное и минимальное значение из входного файла - PullRequest
0 голосов
/ 21 октября 2018

Сначала я написал этот код, и он работал хорошо.

      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 строкэти

... и т. д.

Чтобы заставить часть интеграции работать с другими файлами, мне нужен код, чтобы найтиaximum и minumum wl автоматически и применяют их к wl (n) и wl (1) соответственно.

Поэтому независимо от того, сколько строк в файле, часть интеграции будет работать всегда.(Другими словами, мне не нужно говорить n = 25 для максимума и использовать wl (1) для минимума)

Я знаю, что есть что-то для поиска максимального значения, например, maxval (a), но я не думаю, что смогу применить его к этому коду.

Как я могу использовать maxval, если он подходит для того, что я хочу сделать?

...