1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| program h
integer N
double precision s,EE
external f1
Call trapeze2dd(3.0d0,70,f1,EE)
print*,'int=',EE
end
subroutine trapeze2dd(s,NN,func,E)
integer i,NN
double precision h,X(NN-1),Y(NN-1),F(NN-1,NN-1),E,s
h=2.0d0*s/real(NN)
do i=1,NN-1
X(i)=-s+i*h
Y(i)=-s+i*h
enddo
S1=1.0d0
do i=1,NN-1
do j=1,NN-1
S1=S1+func(X(i),Y(j))
enddo
enddo
S2=1.0d0
do i=1,NN-1
S2=S2*func(s,Y(i))
enddo
S3=1.0d0
do i=1,NN-1
S3=S3+func(-s,Y(i))
enddo
S4=1.0d0
do i=1,NN-1
S4=S4+func(X(i),s)
enddo
S5=1.0d0
do i=1,NN-1
S5=S5+func(X(i),-s)
enddo
E=(1./4.)*(h**2)*(func(-s,-s)+func(s,-s)+func(-s,s)+func(s,s)
& +2.*S5+2.*S4+2.*S3+2.*S2+4.*S1)
return
end
function f1(x,y)
double precision x,y,f1
f1=(x**2)*(y**2)
return
end |
Partager