Anda di halaman 1dari 25

Informe Laboratorio 2: MA-2601

Diferenciacin, integracin y
EDO No lineales

Alumno:
Francisco Daz Barahona
Profesor:
Gonzalo Hernndez

ACT 1: Interpolacin y diferenciacin


1) Primero definimos el vector grueso pedido y definimos las funciones f y g:
x= -3:0.5:3;
f= (sin(x.^2))./((x.^2)+1);
g=x.*sin(x.^2);

Usamos el algoritmo dado para calcular el polinomio de interpolacin de f y posteriormente g,


usando los comandos polyfit y polyval:

n=length(x)-1;
pf=polyfit(x,f,n);
pg=polyfit(x,g,n);
xf=-3:0.05:3;
ff=(sin(xf.^2))./((xf.^2)+1);
gf=xf.*sin(xf.^2);
fp=polyval(pf,xf);
gp=polyval(pg,xf);

Usamos comandos subplot para poder tener en u mismo grafico los polinomios de
interpolacin de f y g, y los comparamos con las funciones:
subplot(2,1,1), plot(xf,ff,'-b')
title('Polinomio de Lagrangre de f=(sin(x^2))/((x^2)+1)')
hold on
subplot(2,1,1), plot(xf,fp,'-r')
legend('y=f(x)','y=PL(x)')
subplot(2,1,2), plot(xf,gf,'-b')
title('Polinomio de Lagrangre de g=x*sin(x^2)')
hold on
subplot(2,1,2), plot(xf,gp,'-r')
legend('y=g(x)','y=PL(x)')

Esto ltimo nos entrega el siguiente grafico:

-Vemos que, aunque existen diferencias en los extremos, el polinomio de interpolacin tiene
una gran similitud a la funcin en la vecindad alrededor de x=0 en ambas funciones.
El programa.m ocupado y completo es:
x= -3:0.5:3;
f=(sin(x.^2))./((x.^2)+1);
g=x.*sin(x.^2);
n=length(x)-1;
pf=polyfit(x,f,n);
pg=polyfit(x,g,n);
xf=-3:0.05:3;
ff=(sin(xf.^2))./((xf.^2)+1);
gf=xf.*sin(xf.^2);
fp=polyval(pf,xf);
gp=polyval(pg,xf);
subplot(2,1,1), plot(xf,ff,'-b')
title('Polinomio de Lagrangre de f=(sin(x^2))/((x^2)+1)')
hold on
subplot(2,1,1), plot(xf,fp,'-r')
legend('y=f(x)','y=PL(x)')
subplot(2,1,2), plot(xf,gf,'-b')
title('Polinomio de Lagrangre de g=x*sin(x^2)')
hold on
subplot(2,1,2), plot(xf,gp,'-r')
legend('y=g(x)','y=PL(x)')

2) Como son pedidos 2 vectores, para 2 funciones en 2 mtodos, fueron necesarios 8


programas distintos.
Por ende, ejemplificaremos con 1 caso y se dar a conocer los cambios en los diversos casos.
Usaremos la funcin f con vector grueso de puntos para el mtodo de 3.
-Primero definimos el vector y la funcin correspondiente:
x= -3:0.5:3;% -3:0.05:3 para vector fino
f=(sin(x.^2))./((x.^2)+1); % g=x.*sin(x.^2) para g

-Para la aplicar el mtodo de 3 puntos, procedemos de la siguiente manera:


h=1*10^(-6);
m=x+h;
n=x-h;
fm=(sin(m.^2))./((m.^2)+1); %gm=m.*sin(m.^2)
fn=(sin(n.^2))./((n.^2)+1); %gn=n.*sin(n.^2)
df=(fm-fn)/(2*h);

As, obtenemos los puntos necesarios, y utilizamos el h sugerido.


-El algoritmo se complica para el mtodo de 5 puntos:
o=x+h;
p=x-h;
q=x+2*h;
r=x-2*h;
fo=(sin(o.^2))./((o.^2)+1);
fp=(sin(p.^2))./((p.^2)+1);
fq=(sin(q.^2))./((q.^2)+1);
fr=(sin(r.^2))./((r.^2)+1);
df=(fr-8*fp+8*fo-fq)/(12*h);

-Luego calculamos la integral explcitamente y el error entre esta y la f calculada con el


mtodo:
r1=cos(x.^2).*((x.^2)+1);
r2=-sin(x.^2);
r3=(((x.^2)+1).^2);
dr=(2.*x.*(r1+r2))./r3;
e=abs(dr-df);
%r1=sin(x.^2);
%r2=2.*(x.^2).*cos(x.^2);
%dr=r1+r2;
%e=abs(dr-dg); para funcin g

-Finalmente graficamos:
subplot (2,1,1), plot(x,df,'-+b')
title('Grfico df=sin(x^2))/((x^2)+1; con malla gruesa')
hold on
plot(x,dr,'--r')
legend('df mtodo de 3 puntos', 'df calculada')
subplot (2,1,2), plot(x,e)
title('Diferencia de df con respecto a la derivada calculada')

-Lo anterior nos entrega el siguiente grafico

-Para el mtodo de 5 puntos entrega el siguiente grafico:

-Si usamos el mtodo de 3 puntos en una malla fina de puntos, el resultado es el siguiente

-Usando el mtodo de 5 puntos entrega el siguiente grafico:

-Para f con mtodo de 3 puntos en malla gruesa de puntos:


x= -3:0.5:3;
f=(sin(x.^2))./((x.^2)+1);
h=1*10^(-6);
m=x+h;
n=x-h;
fm=(sin(m.^2))./((m.^2)+1);
fn=(sin(n.^2))./((n.^2)+1);
df=(fm-fn)/(2*h);
r1=cos(x.^2).*((x.^2)+1);
r2=-sin(x.^2);
r3=(((x.^2)+1).^2);
dr=(2.*x.*(r1+r2))./r3;
e=abs(dr-df);
subplot (2,1,1), plot(x,df,'-+b')
title('Grfico df=sin(x^2))/((x^2)+1; con malla gruesa')
hold on
plot(x,dr,'--r')
legend('df mtodo de 3 puntos', 'df calculada')
subplot (2,1,2), plot(x,e)
title('Diferencia de df con respecto a la derivada calculada')

-Para f con mtodo de 5 puntos en malla gruesa de puntos:


x= -3:0.5:3;
f=(sin(x.^2))./((x.^2)+1);
h=1*10^(-6);
o=x+h;
p=x-h;
q=x+2*h;
r=x-2*h;
fo=(sin(o.^2))./((o.^2)+1);
fp=(sin(p.^2))./((p.^2)+1);
fq=(sin(q.^2))./((q.^2)+1);
fr=(sin(r.^2))./((r.^2)+1);
df=(fr-8*fp+8*fo-fq)/(12*h);
r1=cos(x.^2).*((x.^2)+1);
r2=-sin(x.^2);
r3=(((x.^2)+1).^2);
dr=(2.*x.*(r1+r2))./r3;
e=abs(dr-df);
subplot (2,1,1), plot(x,df,'-+b')
title('Grfico df=sin(x^2))/((x^2)+1; con malla gruesa')
hold on
plot(x,dr,'--r')
legend('df mtodo de 5 puntos', 'df calculada')
subplot (2,1,2), plot(x,e)
title('Diferencia de df con respecto a la derivada calculada')

-Para f con mtodo de 3 puntos en malla fina de puntos:


x= -3:0.05:3;
f=(sin(x.^2))./((x.^2)+1);
h=1*10^(-6);
m=x+h;
n=x-h;
fm=(sin(m.^2))./((m.^2)+1);
fn=(sin(n.^2))./((n.^2)+1);
df=(fm-fn)/(2*h);
r1=cos(x.^2).*((x.^2)+1);
r2=-sin(x.^2);
r3=(((x.^2)+1).^2);
dr=(2.*x.*(r1+r2))./r3;
e=abs(dr-df);
subplot (2,1,1), plot(x,df,'-+b')
title('Grfico df=sin(x^2))/((x^2)+1; con malla fina')
hold on
plot(x,dr,'--r')
legend('df mtodo de 3 puntos', 'df calculada')
subplot (2,1,2), plot(x,e)
title('Diferencia de df con respecto a la derivada calculada')

-Para f con mtodo de 5 puntos en malla fina de puntos:


x= -3:0.05:3;
f=(sin(x.^2))./((x.^2)+1);
h=1*10^(-6);
o=x+h;
p=x-h;
q=x+2*h;
r=x-2*h;
fo=(sin(o.^2))./((o.^2)+1);
fp=(sin(p.^2))./((p.^2)+1);
fq=(sin(q.^2))./((q.^2)+1);
fr=(sin(r.^2))./((r.^2)+1);
df=(fr-8*fp+8*fo-fq)/(12*h);
r1=cos(x.^2).*((x.^2)+1);
r2=-sin(x.^2);
r3=(((x.^2)+1).^2);
dr=(2.*x.*(r1+r2))./r3;
e=abs(dr-df);
subplot (2,1,1), plot(x,df,'-+b')
title('Grfico df=sin(x^2))/((x^2)+1; con malla fina')
hold on
plot(x,dr,'--r')
legend('df mtodo de 5 puntos', 'df calculada')
subplot (2,1,2), plot(x,e)
title('Diferencia de df con respecto a la derivada calculada')

-Los Grficos de g y sus programas correspondientes son:


-Para g con mtodo de 3 puntos en malla gruesa de puntos:

x= -3:0.5:3;
g=x.*sin(x.^2);
h=1*10^(-6);
m=x+h;
n=x-h;
gm=m.*sin(m.^2);
gn=n.*sin(n.^2);
dg=(gm-gn)/(2*h);
r1=sin(x.^2);
r2=2.*(x.^2).*cos(x.^2);
dr=r1+r2;
e=abs(dr-dg);
subplot (2,1,1), plot(x,dg,'-+b')
title('Grfico dg=x*sin(x^2); con malla gruesa')
hold on
plot(x,dr,'--r')
legend('dg mtodo de 3 puntos', 'dg calculada')
subplot (2,1,2), plot(x,e)
title('Diferencia de dg con respecto a la derivada calculada')

-Para g con mtodo de 5 puntos en malla gruesa de puntos:

x= -3:0.5:3;
g=x.*sin(x.^2);
h=1*10^(-6);
o=x+h;
p=x-h;
q=x+2*h;
r=x-2*h;
go=o.*sin(o.^2);
gp=p.*sin(p.^2);
gq=q.*sin(q.^2);
gr=r.*sin(r.^2);
dg=(gr-8*gp+8*go-gq)/(12*h);
r1=sin(x.^2);
r2=2.*(x.^2).*cos(x.^2);
dr=r1+r2;
e=abs(dr-dg);
subplot (2,1,1), plot(x,dg,'-+b')
title('Grfico dg=x*sin(x^2); con malla gruesa')
hold on
plot(x,dr,'--r')
legend('dg mtodo de 5 puntos', 'dg calculada')
subplot (2,1,2), plot(x,e)
title('Diferencia de dg con respecto a la derivada calculada')

-Para g con mtodo de 3 puntos en malla fina de puntos:

x= -3:0.05:3;
g=x.*sin(x.^2);
h=1*10^(-6);
m=x+h;
n=x-h;
gm=m.*sin(m.^2);
gn=n.*sin(n.^2);
dg=(gm-gn)/(2*h);
r1=sin(x.^2);
r2=2.*(x.^2).*cos(x.^2);
dr=r1+r2;
e=abs(dr-dg);
subplot (2,1,1), plot(x,dg,'-+b')
title('Grfico dg=x*sin(x^2); con malla fina')
hold on
plot(x,dr,'--r')
legend('dg mtodo de 3 puntos', 'dg calculada')
subplot (2,1,2), plot(x,e)
title('Diferencia de dg con respecto a la derivada calculada')

-Para g con mtodo de 5 puntos en malla fina de puntos:

x= -3:0.05:3;
g=x.*sin(x.^2);
h=1*10^(-6);
o=x+h;
p=x-h;
q=x+2*h;
r=x-2*h;
go=o.*sin(o.^2);
gp=p.*sin(p.^2);
gq=q.*sin(q.^2);
gr=r.*sin(r.^2);
dg=(gr-8*gp+8*go-gq)/(12*h);
r1=sin(x.^2);
r2=2.*(x.^2).*cos(x.^2);
dr=r1+r2;
e=abs(dr-dg);
subplot (2,1,1), plot(x,dg,'-+b')
title('Grfico dg=x*sin(x^2); con malla fina')
hold on
plot(x,dr,'--r')
legend('dg mtodo de 5 puntos', 'dg calculada')
subplot (2,1,2), plot(x,e)
title('Diferencia de dg con respecto a la derivada calculada')

3) Con lo medido anteriormente, podemos concluir lo siguiente:


-Vemos que, tanto para la funcin f como para la g, el comportamiento es el mismo.
- Efectivamente la malla fina de puntos da una forma mas precisa a la funcin, por tener una
mayor cantidad de puntos .
-Por lo mismo, el mtodo de 5 puntos presenta un error mayor que el mtodo de 3 puntos, sin
embargo, si no se consideran casos aislados, como en los extremos, la diferencia es casi nula.
-Al usar la malla fina de puntos, el error entre puntos aumenta en los extremos, sin embargo el
error sigue siendo mnimo.
-Se puede predecir el comportamiento del error en relacin a la curvatura de la funcin.
Mientras mayor curvatura y cantidad curvas, los mtodos, por depender de los puntos
alrededor del estudiado, presentan un mayor error.
- Vemos que, como el error es mnimo, ambos mtodos son una excelente aproximacin de la
derivada de la funcin.

ACT 2: Integracin de funcin a variable real


1) Definimos la funcin G de la siguiente manera:
function g=G(x)
g=@(x)(exp(-x.^2).*x)./((x.^2)+1)-(5.*x.*cos(x.^3));
end

2) Creamos el siguiente programa:


a=0;
b=2;
x= a:0.01:b;
g=G(x);
tic, [p,vp]=quad(g, a, b,1e-4), toc;
tic, [q,vq]=quad(g, a, b,1e-6), toc; %valor por defecto de matlab
tic, [r,vr]=quad(g, a, b,1e-8), toc;
c=[p, q, r]
d=[vp, vq, vr]

-Usamos la funcin tic, , toc para conocer el tiempo en que se ejecuta la accin para cado de
los errores de tolerancia. Definimos un vector que nos entregue los valores de la integral y de
la cantidad de clculos por comodidad.

Lo anterior nos entrega:

Valor de la integral
Numero de
evaluaciones
realizadas
Tiempo en realizar el
clculo

Valor T=1*10^-4

Valor T=1*10^-6

Valor T=1*10^-8

-1.6559

-1.6559

-1.6559

41

113

245

0.001129

0.002678

0.005485

-Vemos que, para los valores de tolerancia elegidos, nos da el mismo valor de la integral, por
tanto no es posible notar la diferencia entre ellos. Por ende, el valor por defecto de matlab es
bastante correcto.
-El valor del tiempo vara en cada ocasin, se eligi un valor promedio de esta.

3) En este caso, simplemente cambiamos el valor de los lmites a y b:


a=2;
b=4;
x= a:0.01:b;
g=G(x);
tic, [p,vp]=quad(g, a, b,1e-4), toc;
tic, [q,vq]=quad(g, a, b,1e-6), toc;
tic, [r,vr]=quad(g, a, b,1e-8), toc;
c=[p, q, r]
d=[vp, vq, vr]

En este caso, los valores entregados fueron

Valor de la integral
Numero de
evaluaciones
realizadas
Tiempo en realizar el
clculo

Valor T=1*10^-4

Valor T=1*10^-6

Valor T=1*10^-8

0.4432

0.4432

0.4432

169

485

1181

0.003777

0.010335

0.024505

-En este caso, otra vez los valores de la integral son iguales en los 3 casos y no podemos
distinguir una diferencia entre ellos

4)- Vemos que aument la cantidad de evaluaciones en 3) sobre 2).


- Por lo anterior, tambin aumento el tiempo en realizar los clculos en 3) sobre 2).
-Los valores de error de tolerancia, son suficientemente pequeos para que no se pudiera
percibir una diferencia entre el valor de la integral. En particular, el valor por defecto de la
funcin quad.

ACT 3: Integracin de funcin en 2 variables


1) Definimos las 3 funciones que utilizaremos y las escribimos como funcin.m:
function m=S1(x,y) %Definida en el intervalo [-2,2]
m=((sin(x.^2+y.^2)));
end
function m=S2(x,y) %Definida en el intervalo [-3,3]
m=((x.^3)-(y.^2))./(10+(x.*y));
end
function m=S3(x,y) %Definida en el intervalo [0,4]
m=((x.^(1/2))+(y.^(1/2)));
end

-Luego calculamos la integral para una funcin con 2 variables con el programa dblquad,
definimos los errores de tolerancia, los vectores (x,y) y usamos la funcin tic, ,toc para
obtener el tiempo :

Para S1:
e1=1e-4;
e2=1e-6;
e3=1e-8;
x=-2:0.05:2;
y=-2:0.05:2;
tic, r1=dblquad(@S1,-2,2,-2,2,e1) ,toc;
tic, r2=dblquad(@S1,-2,2,-2,2,e2) ,toc;
tic, r3=dblquad(@S1,-2,2,-2,2,e3) ,toc;
s=[r1,r2,r3]

Para S2:
e1=1e-4;
e2=1e-6;
e3=1e-8;
x=-3:0.05:3;
y=-3:0.05:3;
tic, r1=dblquad(@S2,-3,3,-3,3,e1) ,toc;
tic, r2=dblquad(@S2,-3,3,-3,3,e2) ,toc;
tic, r3=dblquad(@S2,-3,3,-3,3,e3) ,toc;
s=[r1,r2,r3]

Para S3:
e1=1e-4;
e2=1e-6;
e3=1e-8;
x=0:0.05:3;
y=0:0.05:3;
tic, r1=dblquad(@S3,0,3,0,3,e1) ,toc;
tic, r2=dblquad(@S3,0,3,0,3,e2) ,toc;
tic, r3=dblquad(@S3,0,3,0,3,e3) ,toc;
s=[r1,r2,r3]

-Incluimos en el programa las funciones meshgrid y plot3 para tener una grafica de las
funciones y ver mejor su comportamiento. Usamos el siguiente comando
[x1,y1]=meshgrid(x, y);
z=((sin(x.^2+y.^2)));
%z=((x.^3)-(y.^2))./(10+(x.*y)); para S2
%z=((x.^(1/2))+(y.^(1/2))); para S3
plot3(x1,y1,z)
title(' Grfico funcin h=((sin(x^2+y^2)))')

Lo que nos entrego los siguientes grficos:

Los resultados obtenidos fueron los siguientes


Para S1

Valor T=1*10^-4

Valor T=1*10^-6

Valor T=1*10^-8

Valor de la integral

2.9709

2.9710

2.9710

Tiempo en realizar el
clculo

0.028517

0.165875

0.846226

Para S2

Valor T=1*10^-4

Valor T=1*10^-6

Valor T=1*10^-8

Valor de la integral

-13.7840

-13.7840

-13.7840

Tiempo en realizar el
clculo

0.022261

0.121149

0.873319

Para S3

Valor T=1*10^-4

Valor T=1*10^-6

Valor T=1*10^-8

Valor de la integral

20.7834

20.7846

20.7846

Tiempo en realizar el
clculo

0.014432

0.070645

0.400909

3) Usamos la funcin S1 (z=((sin(x^2+y^2)), y usamos las condiciones :

- (x^2)/9 + (y^2)/4 <=1


- (x^2)/9 - (y^2)/4 <=1
- 2*(x^2)>=y

Todo lo desarrollamos en 1 solo programa que, adems calcula el tiempo en que se tarda cada
uno, el valor de la integral y genera un grafico de la funcin con la condicin impuesta. El error
elegido fue el error por defecto:
e=1e-6;
x=-3:0.05:3;
y=-3:0.05:3;
f=@(x,y)((sin(x.^2+y.^2)).*(((x.^2)./9 + ((y.^2)./4)) <=1));
g=@(x,y)((sin(x.^2+y.^2)).*(((x.^2)./9 - ((y.^2)./4)) <=1));
h=@(x,y)((sin(x.^2+y.^2)).*((y<=(2*x.^2))));
tic, r1=dblquad(f,-3,3,-3,3,e) ,toc;
tic, r2=dblquad(g,-3,3,-3,3,e) ,toc;
tic, r3=dblquad(h,-3,3,-3,3,e) ,toc;
s=[r1,r2,r3]
z1=((sin(x.^2+y.^2).*(((x.^2)./9 + ((y.^2)./4)) <=1)));
z2=((sin(x.^2+y.^2).*(((x.^2)./9 - ((y.^2)./4)) <=1)));
z3=((sin(x.^2+y.^2).*((y<=(2*x.^2)))));
subplot (3,1,1), plot3(x1,y1,z1)
title({'Grfico Funcin z=(sin(x^2+y^2))';'Condicin ((x^2)/9 +
(y^2)/4 <=1)'})
subplot (3,1,2), plot3(x1,y1,z2)
title('Condicin ((x^2)/9 - (y^2)/4 <=1)')
subplot (3,1,3), plot3(x1,y1,z3)
title('Condicin ( (2*x^2)>=y)')

Esto nos entrega:


Para S1

Condicin

Condicin

Condicin

(x^2)/9
+ (y^2)/4 <=1

(x^2)/9
- (y^2)/4 <=1

2*(x^2)>=y

Valor de la integral

3.2667

4.3497

3.2360

Tiempo en realizar el
clculo (s)

0.629101

0.653097

0.735090

El grafico y su programa final el siguiente:

e=1e-6;
x=-3:0.05:3;
y=-3:0.05:3;
f=@(x,y)((sin(x.^2+y.^2)).*(((x.^2)./9 + ((y.^2)./4)) <=1));
g=@(x,y)((sin(x.^2+y.^2)).*(((x.^2)./9 - ((y.^2)./4)) <=1));
h=@(x,y)((sin(x.^2+y.^2)).*((y<=(2*x.^2))));
tic, r1=dblquad(f,-3,3,-3,3,e) ,toc;
tic, r2=dblquad(g,-3,3,-3,3,e) ,toc;
tic, r3=dblquad(h,-3,3,-3,3,e) ,toc;
s=[r1,r2,r3]
[x1,y1]=meshgrid(x, y);
z1=((sin(x.^2+y.^2).*(((x.^2)./9 + ((y.^2)./4)) <=1)));
z2=((sin(x.^2+y.^2).*(((x.^2)./9 - ((y.^2)./4)) <=1)));
z3=((sin(x.^2+y.^2).*((y<=(2*x.^2)))));
subplot (3,1,1), plot3(x1,y1,z1)
title({'Grfico Funcin z=(sin(x^2+y^2))';'Condicin ((x^2)/9 +
(y^2)/4 <=1)'})
subplot (3,1,2), plot3(x1,y1,z2)
title('Condicin ((x^2)/9 - (y^2)/4 <=1)')
subplot (3,1,3), plot3(x1,y1,z3)
title('Condicin ( (2*x^2)>=y)')

ACT 4: Modelo de crecimiento logstico


1) Definimos la funcion.m que representa la ecuacin diferencial como:
function dy=func(t,y)
dy= (0.02).*(y)- (0.00004).*(y.^2);
end

- Primero usamos los comandos ode23 y ode45 para determinar la solucin numrica , usando
la funcin creada, el intervalo [0,100] y el punto p(0)= 76.1 dado (incluimos la funcin tic, toc
para tener los tiempos):
tic, [e1,f1]=ode23(@func,[0 100],76.1); toc;
tic, [e2,f2]=ode45(@func,[0 100],76.1); toc;

- En los valores f1 y f2, quedan guardadas las funciones, pero como sus dimensiones dependen
de e1, e2 que son ajustados por matlab, para comparar las soluciones, escribimos la solucin
analtica (conocida), con 2 dimensiones distintas, ajustadas segn f1 y f2. Adems debemos
usar el vector traspuesto, ya que linspace entrega un vector horizontal y ode entrega valores
en vertical
t1=linspace(0,100,length(f1));
t1=t1';
t2=linspace(0,100,length(f2));
t2=t2';
p1=500./(1+(4239./761).*exp((-1/50).*t1));
p2=500./(1+(4239./761).*exp((-1/50).*t2));

- Con ello podemos calcular los errores simplemente comparando cada solucin numrica, con
su solucin analtica correspondiente:
Erk23=abs(p1-f1);
Erk45=abs(p2-f2);

-Ahora incluimos los grficos, los cuales dividimos en 4 subplot. El primero incluye la solucin
numrica con Runge-Kutta 2, el segundo con la solucin numrica con Runge-Kutta 4, el
tercero con la solucin analtica y el cuarto grafica el error Erk23 y Erk45:
subplot(4,1,1), plot(e1,f1,'-b')
title({'Solucin numrica del modelo de crecimiento logstico ';'Por
mtodo de Runge-Kutta 2'})
subplot(4,1,2), plot(e2,f2,'-r')
title('Por mtodo de Runge-Kutta 4')
subplot(4,1,3), plot(t1,p1,'m')
title('Solucin Analtica')
subplot(4,1,4), plot(t1,Erk23,'-b')
hold on
plot(t2,Erk45,'-r')
legend('Erk23','Erk45')
title('Comparacin del error del mtodo R-K(2) con respecto al mtodo
R-K(4)')

-El grafico entregado fue el siguiente:

- Los tiempos entregados por la funcin tic, toc son, en promedio:


-0.003541 (s), para ode23
-0.008426 (s), para ode45

-El programa completo utilizado fue el siguiente:


tic, [e1,f1]=ode23(@func,[0 100],76.1); toc;
tic, [e2,f2]=ode45(@func,[0 100],76.1); toc;
t1=linspace(0,100,length(f1));
t1=t1';
t2=linspace(0,100,length(f2));
t2=t2';
p1=500./(1+(4239./761).*exp((-1/50).*t1));
p2=500./(1+(4239./761).*exp((-1/50).*t2));
Erk23=abs(p1-f1);
Erk45=abs(p2-f2);
subplot(4,1,1), plot(e1,f1,'-b')
title({'Solucin numrica del modelo de crecimiento logstico ';'Por
mtodo de Runge-Kutta 2'})
subplot(4,1,2), plot(e2,f2,'-r')
title('Por mtodo de Runge-Kutta 4')
subplot(4,1,3), plot(t1,p1,'m')
title('Solucin Analtica')
subplot(4,1,4), plot(t1,Erk23,'-b')
hold on
plot(t2,Erk45,'-r')
legend('Erk23','Erk45')
title('Comparacin del error del mtodo R-K(2) con respecto al mtodo
R-K(4)')

2) Para calcular Em, primero hacemos un vector con los datos reales:
VR= [76.1 92.4 106.5 123.1 132.6 152.3 180.7 204.9 226.5 248.7 281.4];

-Luego generamos un vector p, el cual tendr el mismo largo que VR, inicialmente se har solo
con ceros:
p=zeros(1,length(VR));

- Para completarlo utilizaremos un ciclo for, el cual iniciara en ti=0 y terminara en tf=100,
saltando de 10 en 10.
-Como el vector solo tiene once trminos, en la expresin del for se dividir por 10, los cuales
se recuperaran al multiplicar el tiempo t por 10 en la funcin.
-Como los vectores inician con p(1), y nuestro for inicia con t=0, simplemente se sumara 1
for t=0:1:10
p(t+1)=500./(1+(4239./761).*exp((-1/50).*(t*10)));
end

-Finalmente calculamos el error Em, como el valor absoluto de la resta de los valores reales
con los calculados;
Em=abs(VR-p);

-Adems incluimos un grafico con los valores reales y los calculados para tener mayor claridad:
T=0:10:100;
plot(T,VR,'-b')
title('Modelo de crecimiento logstico')
hold on
plot(T,p,'-r')
legend('Datos reales', 'Valores calculados')

Lo cual entrego el siguiente grafico:

Los valores de Em fueron los siguientes:


Ao

Tiempo tk

1900
1910
1920
1930
1940
1950
1960
1970
1980
1990
2000

0.0
10.0
20.0
30.0
40.0
50.0
60.0
70.0
80.0
90.0
100.

P(t) Real
[Millones de personas]
76.1
92.4
106.5
123.1
132.6
152.3
180.7
204.9
226.5
248.7
281.4

P(t) por solucin analtica


[Millones de personas]
76.1
89.92
105.62
123.24
142.74
163.98
186.72
210.65
235.33
260.31
285.08

Error Absoluto
0.0
2.48
0.88
0.14
10.14
11.68
6.02
5.75
8.83
11.61
3.68

3) (a) Vemos que, tanto Runge-Kutta 2, como Runge-Kutta 4, dieron resultados muy cercanos
a la solucin analtica, en particular Runge-Kutta 4, que presento un error promedio de 1e-5, lo
que es una gran precisin.
(b) Vemos que, a pesar de existir diferencias entre los valores, la diferencia promedio fue de
5.56, lo cual, es menor al 10% de diferencia (en el mejor de los casos fue menor al 1%), lo que
demuestra que le modelo de crecimiento logstico representa de buena manera los datos
reales.

Anda mungkin juga menyukai