tinna07
Newbie | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Привет! помогите, пожалуйста с такой проблемой. нужно вычислить значение функции F на определенном интервале по х [xs,xf] функция - это интеграл от 0 до бесконечности, интегрирование идет по переменной t1. для вычисления интеграла беру из IMSL функцию DQDAGI в одной точке-то все считается: задано конкретное х, вызываем DQDAGI, она обращается к function F(t1) и все вроде хорошо. а вот как сделать, чтобы был цикл? чтобы х изменялось, передавалось в function F(t1), она все считала и отпрвлялась в DQDAGI. Можно ли как-то сделать зависимость от двух переменных и какую тогда функцию из IMSL использовать? потому что в DQDAGI прописано, что берется функция от одной переменно, по которой потом интегрируем. как передать значение х из цикла в функцию? CVF6 program exc use msimsl USE MSFLIB integer INTERV real*8 q,TC,TD,k,v,base,y,z,R,RR,pi,x,xf,xs,xstep,t0,t,F,BOUND,ERRABS,ERRREL,RESULT,ERREST,xx parameter (pi=3.1415926535) character(256) start_file$,out$,a$ external F !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! read parameters start_file$ = 'parameters.txt' open(33,file = start_file$) read(33,*)q read(33,*)TC read(33,*)TD read(33,*)k read(33,*)v read(33,*)base read(33,*)y read(33,*)z read(33,*)xs r ead(33,*)xf read(33,*)xstep read(33,*)t read(33,'(a)')out$ close(33) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! out$ = trim(out$) open(77,file = out$) write(77,*) 'CoordX RESULT ' t0=1/(4*TD*k) BOUND=0.0 INTERV=1 ERRABS=0.0 ERRREL=1e-5 do x=xs,xf,xstep CALL DQDAGI(F, BOUND, INTERV, ERRABS, ERRREL, RESULT, ERREST) write(77,*) x, RESULT end do close(77) write(*,*)'You results are in file ', out$ end program exc REAL*8 FUNCTION F(t1) ! integrand REAL*8 t1 common/integrand/TD,v,y,z,RR,pi,x,t0,t RR=(-v*t+x)*(-v*t+x)+y*y F=exp(-(z*z/(4*TD*t1))-(RR/(4*TD*(t0+t1)))-(v*v*(t0+t1)/(4*TD)))/(sqrt(t1)*(t0+t1)) end FUNCTION F это может быть как-то вообще элементарно делается, я не знаю. просто это моя вторая программа на фортране..... помогите, пожалуйста...... |