Максимальное и минимальное значение из входного файла
Во-первых, я написал этот код, и он работал хорошо.
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, если он подходит для того, что я хочу сделать?