Максимальное и минимальное значение из входного файла

Во-первых, я написал этот код, и он работал хорошо.

      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) является минимальным значением.

Из использования минимума и максимума я могу найти дл.

Таким образом, код работает очень хорошо без каких-либо ошибок.

(Кстати, в подпрограмме причина, по которой я использовал 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 ответов

Другие вопросы по тегам