/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Ayuda metodo de Simpson

 
      Índice del Foro elrincondelc.com -> Algoritmos
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
shinigami



Registrado: 27 Abr 2009
Mensajes: 8

MensajePublicado: 11/12/2010 10:21 pm
Título: Ayuda metodo de Simpson

Hola gente, para pedir un poco de ayuda en la optimizacion de un programita que hize. Se trata de un codigo que permite resolver integrales por el metodo de Simpson. El programa en si funciona bien, pero cuando se lo mostre a mi profesor, el muy jodido dijo que queria que el programa pida la ecuacion , y no que este embebida en el codigo..

aqui les dejo el codigo para que vean de que hablo:
------------------------------------------------------------------------------------
Código:
#include <stdio.h> /*para printf(),scanf()*/
#include <conio.h> /*para getch(),clrscr()*/
#include <stdlib.h>/*para exit()*/
#include <math.h>
//#include <dos.h>
//#define NUMEL 20
double f(double x);
void _error(int n);
enum{INTERVALOS};
enum{SIMPSON1_3=1,SALIR};
int n;
float a,b;
//float X[NUMEL],Fx[NUMEL];

/*Metodo de Simpson 1/3 dada una funcion*/
void Simpson1_3(double a,double b,int n,double *Area)
{
 register int i;
 double x;
 double S0,S1;
 double h;
 h=(b-a)/(2*n);
 S0=S1=0;
 for(i=1;i<=(2*n-1);++i){
   x=a+((double)i)*h;
   if(!(i%2))
   S0+=f(x);
   else
   S1+=f(x);
 }
 *Area=(h*(f(a)+4*S1+2*S0+f(b))/3.0);

  printf("\n El area es -> %5.6f \n\n\n",*Area);
  getch();
}
/*Muestra mensaje de error*/
void _error(int n)
{
  static char *msg[]={
          "Error en los subintervalos",
          ""
         };
  printf("\n %s",msg[n]);
  getch();
}
  /*Funcion a integrar*/
  double f(double x)
 {
   float y;
      y = -x * x + 200;
   return y;
 }

 void LeeDatos(int opc)
{
 if(opc==SIMPSON1_3){
// clrscr();

 putchar('\n');
 printf("\n Numero de intervalos (PAR) -> ");
 }

 scanf("%d",&n);
 if((n<1)||((n%2)!=0)){          //numero de iteraciones menor que 0 o impares
  _error(INTERVALOS);
  exit(1);
 }
 else
  printf("\n Valor de a =>");
  scanf("%f",&a);
  printf("\n Valor de b =>");
  scanf("%f",&b);
}
 /*Muestra el menu en la pantalla*/
 void Menu(char *titulo,char *opciones[])
 {
   int i;
//   clrscr();
   i=0;
//   gotoxy(34,4);
   printf("%s\n\n",titulo);
   for(;*opciones[i];i++)
   printf("\t\t\t\t %d.- %s\n",i+1,opciones[i]);
   printf("\t\t\t\t %d.- Salir\n",i+1);
   putchar('\n');
   printf("\t\t\t\t Opcion: ");
 }
int main(void)
{
  double Area;

  int op;
  char *opciones[]={"Simpson 1/3",

               ""
               };
  do{
 //  clrscr();
   Menu("Metodos de Integracion",opciones);
   scanf("%d",&op);
   switch(op){
    case SIMPSON1_3:    LeeDatos(SIMPSON1_3);
                   Simpson1_3(a,b,n,&Area);
                   break;

    case SALIR:
    //     gotoxy(34,20);
                   printf(" Fin de %s",__FILE__);
//
                   exit(0);
                   break;
    default:
    // gotoxy(34,13);
                   printf("Opcion no permitida. \n\n\n" );
                   getch();
                   break;

   }
  }while(op!=SALIR);

}


--------------------------------------------------------------------------------------------------------------

en este caso, la ecuacion que resuelve el programa es -x * x + 200, pero el profesor quiere que resuelva cualquiera, que seria basicamente cambiar esa ecuacion en el codigo.. pero el quiere que el programa la pida y uno la ingrese cuando se ejecute el programa...

Se que no debe ser muy dificil crear una funcion que pida una ecuacion y la resuelva pero estoy un poco perdido asique si me dan una ayudita se los agradecería un monton!!

desde ya muchas gracias!!
Volver arriba
polly



Registrado: 19 Jul 2007
Mensajes: 531
Ubicación: Palencia

MensajePublicado: 12/12/2010 4:59 am
Título:

LO que se me ocurre asi en frio es que el usuario meta los coeficientes de la funcion y en orden, es decir si quieres integrar x² + x + 1 entre 0 y pi el usuario deberia introducir:
1 1 1 0 pi
Luego en un metodo, teniendo en cuenta que el numero de argumentos es 3 (restando los 2 utlimos que no son coeficientes) mediante un bucle construiria el polinomio.

Lo malo de esta solucion es que solo serviria para polinomios.

S2
Volver arriba
Pantalàimon_



Registrado: 17 Jul 2007
Mensajes: 638

MensajePublicado: 12/12/2010 5:01 am
Título:

¿Seguro que cualquiera? ¿O con cualquier polinomio ya vale?

Un saludo!
Volver arriba
shinigami



Registrado: 27 Abr 2009
Mensajes: 8

MensajePublicado: 12/12/2010 12:57 pm
Título:

l codigo funciona de forma muy parecida a como dice polly.. lo que falta es justamente la implementacion del pedido de la ecuacion..
Volver arriba
      Índice del Foro elrincondelc.com -> Algoritmos
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com