• Domingo 22 de Diciembre de 2024, 21:36

Autor Tema:  Integral En fortran  (Leído 3606 veces)

jodidouniversitario

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Integral En fortran
« en: Jueves 30 de Mayo de 2013, 12:59 »
0
Estoy intentando hacer una integral doble en fortran por el método de simpson pero no se como declarar los limites de integracion.El problema dice asi:
Calcular mediante la formula del Simpson la integral de x*exp(-x*y) siendo la region (0 ≤ x ≤ 2, u(x) ≤ y ≤ v(x)} y siendo
u(x) = x**2-2*x+2 y v(x) =3*exp(x) (para cada valor de x, c = u(x) y d = v(x)). Tomar n = 200 y utilizar dos subprogramas
funcion para calcular u(x) y v(x).
yo he hecho esto y me da error pero no se donde esta



program prosim
implicit none
integer::n,i
real*8::x,a,b,c,d,s,s1,s2,h
real*8,external::f,g_simp,u,v
n=256
a=0d0
b=2d0
c=u(x)
d=v(x)

h=(b-a)/dble(n)
s1=0d0
do i=1,n-1,2
  x=a+dble(i)*h
  s1=s1+g_simp(x,c,d,h)
end do

s2=0d0
do i=2,n-2,2
  x=a+dble(i)*h
  s2=s2+g_simp(x,c,d,h)
end do

s=(h/3d0)*(g_simp(a,c,d,h)+g_simp(b,c,d,h)+4*s1+2*s2)

print*, s
end program prosim



function g_simp(x,c,d,h)
implicit none
integer::j,m
real*8::h,s1,s2,c,d,k,g_simp,y,x
real*8,external::f,

m=2*int((d-c+2*h)/(2*h))

k=(d-c)/dble(m)

s1=0d0
do j=1,m-1,2
  y=c+dble(j)*k
  s1=s1+f(x,y)
end do

s2=0d0
do j=2,m-2,2
  y=c+dble(j)*k
  s2=s2+f(x,y)
end do

g_simp=(k/3d0)*(f(x,c)+f(x,d)+4*s1+2*s2)

end function g_simp



function f(x,y)
real*8::f,x,y
f=x*exp((-x)*y)
end function

function u(x)
real*8::u,x
u=x**2-2*x+2
end function

function v(x)
real*8::v,x
v=3*exp(x)
end function