jueves, 5 de marzo de 2015

MÉTODO DE EULER Y RUNGE KUTTA






CODIFICACIÓN EN C++


#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include<math.h>

//Se debe ingresar X0=0; Y0=1; Xf=1; N=10

/**********************Se ingresa la funcion****************************/

float func(float x, float y){
  return 0.5*(1+x)*pow(y,2);
}

/**********************Reportar los Datos******************************/

void reportar(float x, float y, int i)
{cout<<setiosflags(ios::showpoint | ios::fixed);
  cout<<setiosflags(ios::right);
  cout.precision(4);
  cout<<setw(10)<<i<<setw(15)<<x<<setw(15)<<y<<endl;
}

/**********************Reportar los Datos******************************/

int menu()
{int opc;
  do
  {clrscr();
    cout<<setw(50)<<"SELECCIONE OPCION\n";
    cout<<setw(50)<<"-----------------\n"<<endl;
    cout<<"1.Metodo de Euler"<<endl;
    cout<<"2.Metodo de Runge -Kutta"<<endl;
    cout<<"3.Salir"<<endl;
    cout<<"\nSeleccione Opcion: ";cin>>opc;
  }while(opc<1 || opc>3);
  return opc;
}

/**********************Metodo de Euler******************************/

void Euler(){
  float x0,y0,xf,yf,h;
  int n,i;
  clrscr();
  cout<<setw(50)<<"Metodo de Integracion de Euler"<<endl;
  cout<<setw(50)<<"------------------------------"<<endl<<endl;
  cout<<"Ingrese el valor de x0: ";
  cin>>x0;
  cout<<"Ingrese el valor de y0: ";
  cin>>y0;
  cout<<"ingrese el valor de xf: ";
  cin>>xf;
  do{
    cout<<"Ingrese el numero de subintervalos a emplear: ";
    cin>>n;
  }while(n<=0);
  h=(xf-x0)/n;
  cout<<endl;
  cout<<setw(10)<<"I"<<setw(15)<<"Xi"<<setw(15)<<"Yi"<<endl;
  cout<<setw(10)<<"-"<<setw(15)<<"--"<<setw(15)<<"--"<<endl;
  for(i=1;i<=n;i++)
  { y0=y0+h*func(x0,y0);
    x0=x0+h;
    reportar(x0,y0,i);
  }
  cout<<"\nEl valor de Yf: "<<y0<<endl;
  getch();
}

/**********************Metodo de Runge Kutta******************************/

void Kutta(){
  float x0,y0,xf,yf,h,k1,k2,k3,k4;
  int n,i;
  clrscr();
  cout<<setw(50)<<"Metodo de Runge - Kutta"<<endl;
  cout<<setw(50)<<"-----------------------"<<endl<<endl;
  cout<<"Ingrese el valor de x0: ";
  cin>>x0;
  cout<<"Ingrese el valor de y0: ";
  cin>>y0;
  cout<<"ingrese el valor de xf: ";
  cin>>xf;
  do{
    cout<<"Ingrese el numero de subintervalos a emplear: ";
    cin>>n;
  }while(n<=0);
  h=(xf-x0)/n;
  cout<<endl;
  cout<<setw(10)<<"I"<<setw(15)<<"Xi"<<setw(15)<<"Yi"<<endl;
  cout<<setw(10)<<"-"<<setw(15)<<"--"<<setw(15)<<"--"<<endl;
  for(i=1;i<=n;i++)
  { k1=func(x0,y0);
    k2=func(x0+h/2,y0+h*k1/2);
    k3=func(x0+h/2,y0+h*k2/2);
    k4=func(x0+h,y0+h*k3);
    y0=y0+(k1+2*k2+2*k3+k4)*h/6;
    x0=x0+h;
    reportar(x0,y0,i);
  }
  cout<<"El valor de Yf: "<<y0<<endl;
  getch();
}

/**********************Terminar******************************/

void terminar()
{cout<<"\t\t\t\tSalir del Programa\n";
cout<<"\t\t\t\t------------------\n\n";
cout<<"Gracias por usar el programa"<<endl<<endl;
}

/**********************Funcion Principal******************************/

void main (void)
{int opc;
do
{clrscr();
  opc=menu();
  clrscr();
  switch(opc)
  {case 1: clrscr();Euler(); break;
    case 2: clrscr();Kutta();break;
    case 3: clrscr();terminar();break;
  }
  getch();
}
while(opc!=3);
getch();
}

FUENTE DE INFORMACION

http://www.programandoconcafe.com/2011/01/c-metodo-de-integracion-runge-kutta-y.html



CUADRATURA DE GAUSS


FUENTE DE INFORMACION

https://es.scribd.com/doc/60263145/Cuadratura-de-Gauss#download




MÉTODOS DE SIMPSON

















MÉTODO DE ROMBERG




MÉTODO DEL TRAPECIO