Численное интегрирование большого количества выражений в Fortran - PullRequest
0 голосов
/ 07 мая 2020

Я использую Microsoft Visual Studio с Intel Fortran и совершенно новичок в этой платформе кодирования. Если мой вопрос недостаточно для того, чтобы задать его здесь, я заранее прошу извинения, но мне действительно нужно решение этой проблемы. Мне нужно интегрировать большое количество тригонометрических c выражений (примерно 4860). Я использую библиотеку QUADPACK и следующий код:

program integral

  real ( kind = 4 ), parameter :: a = 0.0E+00
  real ( kind = 4 ) abserr
  real ( kind = 4 ) b,x
  real ( kind = 4 ), parameter :: epsabs = 0.0E+00
  real ( kind = 4 ), parameter :: epsrel = 0.001E+00
  real ( kind = 4 ), external :: f2
  integer ( kind = 4 ) ier
  integer ( kind = 4 ), parameter :: key = 6
  integer ( kind = 4 ) neval
  real ( kind = 4 ), parameter :: r4_pi = 3.141592653589793E+00
  real ( kind = 4 ) result1
  real ( kind = 4 ), parameter :: true = 0.06278740E+00

  b = r4_pi

  call qag ( f2, a, b, epsabs, epsrel, key, result1, abserr, neval, ier )

  write ( *, '(a)' ) ' '
  write ( *, '(a)' ) 'QAG_TEST'
  write ( *, '(a)' ) '  Test QAG'
  write ( *, '(a)' ) ' '
  write ( *, '(a)' ) '  Integrand is COS(100*SIN(X))'
  write ( *, '(a,g14.6)' ) '  Integral left endpoint A =    ', a
  write ( *, '(a,g14.6)' ) '  Integral right endpoint B =   ', b
  write ( *, '(a,g14.6)' ) '  Exact integral is             ', true
  write ( *, '(a,g14.6)' ) '  Estimated integral is         ', result1
  write ( *, '(a,g14.6)' ) '  Estimated integral error =    ', abserr
  write ( *, '(a,g14.6)' ) '  Exact integral error =        ', true - result
  write ( *, '(a,i8)' ) '  Number of function evaluations, NEVAL = ', neval
  write ( *, '(a,i8)' ) '  Error return code IER = ', ier

end program integral

function f2(x)
  implicit none

  real ( kind = 4 ) f2
  real ( kind = 4 ) x
  f2=COS(100*SIN(X))
end function

Из приведенного выше кода я легко могу найти интеграл одного выражения. Но в моем случае у меня есть массив (18 * 270), содержащий все элементы в виде математического выражения. Я хочу позвонить им по одному и объединить их. Пожалуйста, подскажите, как с этим бороться. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...