• Miércoles 20 de Noviembre de 2024, 07:28

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - dual

Páginas: [1]
1
Fortran / Método compuesto de Milne.
« en: Viernes 8 de Mayo de 2009, 22:29 »
Hola a todos. Antes que nada presentarme a todos. Es de buena educación presentarse antes de pedir nada. Invito a birritas!  :beer:

Os explico. Nos han pedido programar en Force (variante del Fortran) un programa que calcule una aproximación de la integral de una función por el método compuesto de milne. La verdad es que llevamos muchos dias peleando sin descanso, rompiéndonos la cabeza Y OOBSESIONADOS con el programita en cuestión y el tiempo se nos hecha encima. La cuestión es que nos da una serie de errores que no sonseguimos solucionar y mi petición es si, por favor, alguien puede echarme un cable y ayudarme a ver qué falla, a que se deben los errores. Os pongo el código del programa y la subrutina de la función, a ver si alguien más experimentado se da cuenta, ya que yo ya no sé ni qué probar!  :argh:

Lo dicho, primero el código del programa:

       include "func.f"
       Program Milne
        dimension a(20),b(20),sum1(20),n(20)

        integer n,i
        real a,b,sum1,func
        write (*,*) "Escribe el primer valor del intervalo"
        read (*,*) a
        write (*,*) "Escribe el segundo valor del intervalo"
        read (*,*) b
        write (*,*) "Escribe el valor de n m£ltiple de 4"
        read (*,*) n
        h=(b-a)/n
        call funcx
         do i=0,n
            x(i)=a+h*i
            y(i)=func(i)
        end do
        sum1=7*(y(0)+y(n))

        do i=1, n-1,mod(i,4)
           if (mod(i,4).eq.1)then
                 sum1=sum1+32*y(i)
           else if (mod(i,4).eq.3)then
                 sum1=sum1+32*y(i)

           else if(mod(i,4).eq.2) then
               sum1=sum1+12*y(i)
           else
               sum1=sum1+14*y(i)
           end if
        end do
        sum1=sum1*2*h/45
        write (*,*) "L'aproximacio en l'interval",a,b, "es",sum1
        end


Y ahora el código de la subrutina donde está la función. Veréis que es simple, para probar, la función es F(x)=x:


      real function funcx
      real x
      func=x
      return
      end



A priori dar mil y una gracias a la ayuda que me podáis prestar, sea mucha o poca. Cualquier cosilla me será vital para llegar a solucionar el problema. De veras, gracias!  ;)

Páginas: [1]