Сначала я написал этот код, и он работал хорошо.
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, если он подходит для того, что я хочу сделать?