8
Carlos A. Aguilar A.Control de Maquinas Eléctricas Tarea1- 25/01/2012 Métodos Numéricos para la Solución de Ecuaciones Diferenciales A continuación se presenta el código en MATLAB con el cual es posible resolver ecuaciones diferenciales ordinarias por los métodos de Euler y Runge-Kutta con pasos de integración de 0.1s, 0.01 y 0.001, para las siguientes ecuaciones: A) d 2 x dt 2 μ [ 1x 2 ] dx dt +xAsin ωt=0 Método de Euler para ED de Segundo Orden “A” %Resolver por metodos numericos la siguiente ecuacion diferencial % x''-u*[1-x^2]*x'+x=0 %Metodo de Euler para ED de Segundo Orden %f(y,t)=y'(y,t) y(0)=y0 %y(t+1)=y(t)+h*f(x,t) clc clear all for i=1:3 if i==1 %Paso de integracion h=0.1 h=0.1; end if i==2 %Paso de integracion h=0.01 h=0.01; end if i==3 %Paso de integracion h=0.001 h=0.001; end %Propiedades del analisis discreto a=0;b=20; %Declaracion de vectores t=a:h:b;%Vector tiempo x1=a:h:b; x2=a:h:b;%Primera derivada %Condiciones iniciales y constantes dadas u=2;A=2;w=3;%Constantes x1(1)=2; %Condicion inicial x2(1)=0;%Condicion inicialA %Ciclo de iteracion para el calculo de la solucion aproximada for n=2:((b-a)/h)+1 x1(n)=x1(n-1)+h*(x2(n-1)); x2(n)=x2(n-1)+h*(u*(1-x1(n-1)^2)*x2(n-1)-x1(n-1)+A*sin(w*t(n-1))); end %Codigo para el graficado con lineas diferentes para cada valor de "h" hold on if i==1 plot(t,x1,'r--') end 1

Solucion de Ecuaciones Diferenciales Ordinarias de Segundo Orden por Métodos Numéricos en MATLAB

Embed Size (px)

DESCRIPTION

Este documento presenta los códigos para la soluciones de ecuaciones diferenciales Ordinarias de Segundo Orden por métodos numéricos en MATLAB. Los métodos numéricos utilizados fueron el de EULER y el de RUNGE-KUTTA de orden 4. Las ODEs resueltas en este ejemplo corresponden a un par de ecuaciones diferenciales de los osciladores de Van Der Pol.

Citation preview

Page 1: Solucion de Ecuaciones Diferenciales Ordinarias de Segundo Orden por Métodos Numéricos en MATLAB

Carlos A. Aguilar A. Control de Maquinas Eléctricas Tarea1-25/01/2012

Métodos Numéricos para la Solución de Ecuaciones Diferenciales

A continuación se presenta el código en MATLAB con el cual es posible resolver ecuaciones diferenciales ordinarias por los métodos de Euler y Runge-Kutta con pasos de integración de 0.1s, 0.01 y 0.001, para las siguientes ecuaciones:

A) d2 xdt2

−μ [1−x2 ] dxdt

+x−Asinωt=0

Método de Euler para ED de Segundo Orden “A”

%Resolver por metodos numericos la siguiente ecuacion diferencial% x''-u*[1-x^2]*x'+x=0 %Metodo de Euler para ED de Segundo Orden%f(y,t)=y'(y,t) y(0)=y0%y(t+1)=y(t)+h*f(x,t)clcclear all for i=1:3 if i==1 %Paso de integracion h=0.1 h=0.1; end if i==2 %Paso de integracion h=0.01 h=0.01; end if i==3 %Paso de integracion h=0.001 h=0.001; end%Propiedades del analisis discretoa=0;b=20;%Declaracion de vectorest=a:h:b;%Vector tiempox1=a:h:b;x2=a:h:b;%Primera derivada%Condiciones iniciales y constantes dadasu=2;A=2;w=3;%Constantesx1(1)=2; %Condicion inicialx2(1)=0;%Condicion inicialA%Ciclo de iteracion para el calculo de la solucion aproximadafor n=2:((b-a)/h)+1x1(n)=x1(n-1)+h*(x2(n-1));x2(n)=x2(n-1)+h*(u*(1-x1(n-1)^2)*x2(n-1)-x1(n-1)+A*sin(w*t(n-1)));end%Codigo para el graficado con lineas diferentes para cada valor de "h"hold onif i==1plot(t,x1,'r--')endif i==2plot(t,x1,'k:')endif i==3plot(t,x1)endend%Etiquetado y leyendas en la graficalegend('h=0.1','h=0.01','h=0.001')Title('Metodo de Euler para Resolver EDO de Segundo Orden')xlabel('Tiempo(t)')ylabel('Solucion(x)')

1

Page 2: Solucion de Ecuaciones Diferenciales Ordinarias de Segundo Orden por Métodos Numéricos en MATLAB

Carlos A. Aguilar A. Control de Maquinas Eléctricas Tarea1-25/01/2012

La grafica de la solución de “A” por el método de Euler es la siguiente:

Método de Runge-Kutta para ED de Segundo Orden “A”

%Metodo de Runge-Kutta para ED de Segundo Orden%x''=f(x,x',t)%Con condiciones iniciales x(t0)=x0 x'(t0)=x'(0)%k1=h*x' l1=h*f(x,x',t)%k2=h*(x'+(1/2)l1) l2=h*f(x+(1/2)k1, x'+(1/2)l1, t+(1/2)h)%k3=h*(x'+(1/2)l2) l3=h*f(x+(1/2)k2, x'+(1/2)l2, t+(1/2)h)%k4=h*(x'+l3) l4=h*f(x+k3, x'+l3, t+h)%%x(t+h)=x+(1/6)(k1+2k2+2k3+k4) x'(t+h)=x'+(1/6)(l1+2l2+2l3+l4)clcclear allfor i=1:3 if i==1 %Paso de integracion h=0.1 h=0.1; end if i==2 %Paso de integracion h=0.01 h=0.01; end if i==3 %Paso de integracion h=0.001 h=0.001; end%Propiedades del analisis discretoa=0;b=20;%Declaracion de vectorest=a:h:b;x1=a:h:b;x2=a:h:b;%Condiciones iniciales y constantes dadasu=2;A=2;w=3;x1(1)=2;

2

Page 3: Solucion de Ecuaciones Diferenciales Ordinarias de Segundo Orden por Métodos Numéricos en MATLAB

Carlos A. Aguilar A. Control de Maquinas Eléctricas Tarea1-25/01/2012

x2(1)=0;for n=2:((b-a)/h)+1k1=h*x2(n-1);l1=h*[u*(1-x1(n-1)^2)*x2(n-1)-x1(n-1)+A*sin(w*t(n-1))];k2=h*(x2(n-1)+(1/2)*l1);l2=h*[u*(1-(x1(n-1)+(1/2)*k1)^2)*(x2(n-1)+(1/2)*l1)-(x1(n-1)+(1/2)*k1)+A*sin(w*(t(n-1)+(1/2)*h))];k3=h*[x2(n-1)+(1/2)*l2];l3=h*[u*(1-(x1(n-1)+(1/2)*k2)^2)*(x2(n-1)+(1/2)*l2)-(x1(n-1)+(1/2)*k2)+A*sin(w*(t(n-1)+(1/2)*h))];k4=h*(x2(n-1)+l3);l4=h*[u*(1-(x1(n-1)+k3)^2)*(x2(n-1)+l3)-(x1(n-1)+k3)+A*sin(w*(t(n-1)+h))];x1(n)=x1(n-1)+(1/6)*(k1+2*k2+2*k3+k4);x2(n)=x2(n-1)+(1/6)*(l1+2*l2+2*l3+l4);endhold onif i==1plot(t,x1,'r--')endif i==2plot(t,x1,'k:')endif i==3plot(t,x1)endendlegend('h=0.1','h=0.01','h=0.001')Title('Metodo de Runge-Kutta para Resolver EDO de Segundo Orden')xlabel('Tiempo(t)')ylabel('Solucion(x)')

La grafica de la solución de “A” por el método de Runge-Kutta es la siguiente:

3

Page 4: Solucion de Ecuaciones Diferenciales Ordinarias de Segundo Orden por Métodos Numéricos en MATLAB

Carlos A. Aguilar A. Control de Maquinas Eléctricas Tarea1-25/01/2012

B) d2 xdt2

−μ [1−x2 ] dxdt

+x=0

Método de Euler para ED de Segundo Orden “B”

%Metodo de Euler para ED de Segundo Orden%f(y,t)=y'(y,t) y(0)=y0%y(t+1)=y(t)+h*f(x,t)clcclear all for i=1:3 if i==1 %Paso de integracion h=0.1 h=0.1; end if i==2 %Paso de integracion h=0.01 h=0.01; end if i==3 %Paso de integracion h=0.001 h=0.001; end%Propiedades del analisis discretoa=0;b=20;%Declaracion de vectorest=a:h:b;%Vector tiempox1=a:h:b;x2=a:h:b;%Primera derivada%Condiciones iniciales y constantes dadasu=2;%Constantesx1(1)=2; %Condicion inicialx2(1)=0;%Condicion inicial%Ciclo de iteracion para el calculo de la solucion aproximadafor n=2:((b-a)/h)+1x1(n)=x1(n-1)+h*(x2(n-1));x2(n)=x2(n-1)+h*(u*(1-x1(n-1)^2)*x2(n-1)-x1(n-1));end%Codigo para el graficado con lineas diferentes para cada valor de "h"hold onif i==1plot(t,x1,'r--')endif i==2plot(t,x1,'k:')endif i==3plot(t,x1)endend%Etiquetado y leyendas en la graficalegend('h=0.1','h=0.01','h=0.001')Title('Metodo de Euler para Resolver EDO de Segundo Orden')xlabel('Tiempo(t)')ylabel('Solucion(x)')

4

Page 5: Solucion de Ecuaciones Diferenciales Ordinarias de Segundo Orden por Métodos Numéricos en MATLAB

Carlos A. Aguilar A. Control de Maquinas Eléctricas Tarea1-25/01/2012

La grafica de la solución de “B” por el método de Euler es la siguiente:

Método de Runge-Kutta para ED de Segundo Orden “B”

%Metodo de Runge-Kutta para ED de Segundo Orden%x''=f(x,x',t)%Con condiciones iniciales x(t0)=x0 x'(t0)=x'(0)%k1=h*x' l1=h*f(x,x',t)%k2=h*(x'+(1/2)l1) l2=h*f(x+(1/2)k1, x'+(1/2)l1, t+(1/2)h)%k3=h*(x'+(1/2)l2) l3=h*f(x+(1/2)k2, x'+(1/2)l2, t+(1/2)h)%k4=h*(x'+l3) l4=h*f(x+k3, x'+l3, t+h)%%x(t+h)=x+(1/6)(k1+2k2+2k3+k4) x'(t+h)=x'+(1/6)(l1+2l2+2l3+l4) clcclear% close%Constantes dadasu=2;A=2;w=3; for i=1:3 if i==1 %Paso de integracion de 0.1 h=0.1; end if i==2 %Paso de integracion de 0.01 h=0.01; end if i==3 %Paso de integracion de 0.001 h=0.001; end%Propiedades del analisis discretoa=0;b=20;%Declaracion de vectorest=a:h:b;

5

Page 6: Solucion de Ecuaciones Diferenciales Ordinarias de Segundo Orden por Métodos Numéricos en MATLAB

Carlos A. Aguilar A. Control de Maquinas Eléctricas Tarea1-25/01/2012

x1=a:h:b;x2=a:h:b;%Condiciones inicialesx1(1)=2; x2(1)=0;for n=2:((b-a)/h)+1k1=h*x2(n-1);l1=h*[u*(1-x1(n-1)^2)*x2(n-1)-x1(n-1)];k2=h*(x2(n-1)+(1/2)*l1);l2=h*[u*(1-(x1(n-1)+(1/2)*k1)^2)*(x2(n-1)+(1/2)*l1)-(x1(n-1)+(1/2)*k1)];k3=h*[x2(n-1)+(1/2)*l2];l3=h*[u*(1-(x1(n-1)+(1/2)*k2)^2)*(x2(n-1)+(1/2)*l2)-(x1(n-1)+(1/2)*k2)];k4=h*(x2(n-1)+l3);l4=h*[u*(1-(x1(n-1)+k3)^2)*(x2(n-1)+l3)-(x1(n-1)+k3)];x1(n)=x1(n-1)+(1/6)*(k1+2*k2+2*k3+k4);x2(n)=x2(n-1)+(1/6)*(l1+2*l2+2*l3+l4);end hold onif i==1plot(t,x1,'r--')endif i==2plot(t,x1,'k:')endif i==3plot(t,x1)end endlegend('h=0.1','h=0.01','h=0.001')Title('Metodo de Runge-Kutta para Resolver EDO de Segundo Orden')xlabel('Tiempo(t)')ylabel('Solucion(x)')

La grafica de la solución de “A” por el método de Runge-Kutta es la siguiente:

6