TÓPICOS DE MATLAB: APLICACIÓN A LOS MÉTODOS NUMÉRICOS.
1. Lima - 2010
T´picos de Matlab: Aplicaciones a M´todos Num´ricos
o e e
1
Jos´ Walter Ysique Quesqu´n
e e
jwysiqueq@pucp.edu.pe
Resumen
Uso del paquete de software matem´tico MatLab para el c´lculo de algunos m´todos num´ri-
a a e e
cos. Se definen funciones en las que se implementan m´todos conocidos para calcular,por ejemplo
e
el polinomio interpolador, ra´ıces,derivada e integral de una funci´n. Adem´s se aborda algunas
o a
nociones con respecto a la soluci´n de ecuaciones diferenciales ordinarias.
o
Palabras clave: MatLab,interpolador,derivada,integral,ecuaciones diferenciales.
Abstract
Use of the mathematical software package MatLab for the calculation of some numerical
methods. Functions are defined in which known methods are implemented to calculate, for
example the interpolador polynomial, roots, derived and integral of a function. In addition one
approaches some slight knowledge with respect to the solution of ordinary differential equations.
Keywords: MatLab, interpolador, derived,integral,differential equations.
————————————————————————————————————————
1
Magister en Matem´ticas .
a
2. Introducci´n
o
Las t´cnicas computacionales permiten abordar problemas de manera num´rica, anal´
e e ıtica o
gr´fica, por ejemplo los sistemas de ecuaciones lineales y no lineales, las soluciones de ecuaciones
a
diferenciales ordinarias y parciales, la evaluaci´n num´rica de derivadas, de integrales, el procesamien-
o e
to de datos experimentales, etc.
MATLAB (MATatrix LABoratory) es un lenguaje de alto nivel y un ambiente interactivo creado
por MathWorks. MATLAB est´ dise˜ ado para realizar r´pida y eficientemente tareas matem´ticas
a n a a
computacionalmente intensivas. El programa cuenta con muchas funciones que permiten hacer todas
las operaciones matem´ticas elementales. Los gr´ficos generados por el computador usando Mat-
a a
lab son utiles para mostrar la evoluci´n de diversos sistemas, como la formaci´n de patrones, el
´ o o
procesamiento de im´genes, etc.
a
Se espera incentivar al lector en el estudio y aplicaci´n de los conceptos fundamentales de las t´cni-
o e
cas num´ricas usando el desarrollo de algoritmos matem´ticos. Asimismo, realizar la implementaci´n
e a o
del programa correspondiente usando el entorno integrado del Matlab.
i
4. 1 Interpolaci´n.
o
Sea P = {(xi , yi = f (xi )) : i = 1, · · ·, n, n ∈ N} un conjunto de puntos dado. Se denomina “funci´n
o
interpolante” a una funci´n cuya gr´fica pasa por todos los puntos del conjunto P .
o a
Figura 1:
• Las funciones m´s usadas para interpolar son las polinomiales debido a que ´stas son m´s f´ciles
a e a a
de derivar e integrar.
• Se dispone de dos m´todos generales de interpolaci´n polin´mica: Interpolaci´n de Lagrange e
e o o o
Interpolaci´n de Hermite.
o
1.1 Interpolaci´n de Lagrange.
o
Sea f la funci´n a interpolar, sean P = {(xi , yi = f (xi )) : i = 1, · · ·, n, n ∈ N} los puntos
o
conocidos,donde f (xi ) es la funci´n evaluada en cada punto xi . El polinomio interpolador de
o
grado m de Lagrange es definido por:
n
Pn = f (xi )Li (x) , n ≤ m . (1)
i=0
donde los Li (x) son llamados polinomios de Lagrange y est´n definidos por:
a
n
x − xj
Li (x) = , i = 0, 1, · · ·, n . (2)
j=0j=i xi − xj
-Propiedades de los Polinomios de Lagrange:
0, si i = j;
• Li (xj ) =
1, i=j.
• El grado de Li (x) es igual a n cualquiera que sea i, donde 0 ≤ i ≤ n .
1
5. -Implementaci´n del m´todo usando MatLab
o e
%Algoritmo de Lagrange
%Ingresar los valores conocidos de x
%Ingresar los valores conocidos de y
%Ingresar los valores a interpolar xi
%muestra el polinomio de lagrange y los valores yi
function Lagrange(x,y,xi);
p=0;
syms t;
n=length(x);
yi=zeros(size(xi));
for i=1:n
z=ones(size(xi));
L=1;
for j=1:n
if i~=j
L=L*(t-x(j))/(x(i)-x(j));
z=z.*(xi-x(j))/(x(i)-x(j));
end
end
yi=yi+z*y(i);
p=p+L*y(i);
p=simplify(p);
end
polinomio=p
yi
Ejemplo 1. Sea f (x) = x21 +1
una funci´n tal que x0 = −2, f (x0 ) = 1/5, x1 = −1, f (x1 ) =
o
1/2, x2 = 0, f (x2 ) = 1 . Su polinomio interpolador de Lagrange es:
2
P2 (x) = f (xi ) · Li (x) ,
i=0
donde :
(x + 1)x x2 x
L0 (x) = = +
(−2 + 1)(−2) 2 2
(x + 2)x
L1 (x) = = x2 − 2x
(−1 + 2)(−1)
(x + 2)(x + 1) x2 3x
L2 (x) = = + +1 .
(2)(1) 2 2
Luego:
1 1
P2 (x) = · L0 (x) + · L1 (x) + 1 · L2 (x)
5 2
2
x 3x
P2 (x) = + +1 .
10 5
2
6. Usando la funci´n “Lagrange” en MatLab, ingresamos la orden :
o
Lagrange([-2 -1 0],[1/5 1/2 1],[-1.5 -0.5])
en donde xi=[-1.5 -0.5] son los valores a interpolar. Como resultado se mostrar´:
a
polinomio = 1/10*t^2+3/5*t+1
yi = 0.3250 0.7250
1.2 Interpolaci´n de Hermite
o
Teniendo en cuenta la interpolaci´n de Lagrange, se puede exigir otro tipo de condiciones,por ejemplo
o
que adem´s de coincidir los valores P (xi ) = f (xi ) = yi , tambi´n coincidan el de sus derivadas:
a e
P ′ (xi ) = f ′ (xi ) = yi para todo xi con i = 0, · · ··, n .
′
As´ tenemos los siguientes datos:
ı
x0 x1 ··· xn
y0 y1 ··· yn
′ ′ ′
y0 y1 ··· yn
Cuadro 1:
Observamos que se tiene 2(n + 1) condiciones, por lo que buscaremos un polinomio de grado
2n + 1 que verifique la condiciones dadas en el Cuadro (1).
1.2.1 Polinomio de Hermite
Se define como: n n
′
P2n+1 (x) = hj (x) · yj + gj (x) · yj , (3)
j=0 j=0
donde hj (x) y gj (x) est´n definidos en t´rminos de polinomios de Lagrange:
a e
hj (x) = [1 − 2(x − xj ) · L′j (xj )] · L2 (x) , gj (x) = (x − xj ) · L2 (x) .
j j (4)
Implementaci´n del m´todo en MatLab :
o e
%Algoritmo generalizado de Hermite
% ingresar valores conocidos de x
% ingresar valores conocidos de y
% ingresar valores de las derivadas dy
% ingresar valores a interpolar xi
function Hermite(x,y,dy,xi)
p=0;
syms t;
n=length(x);
yi=zeros(size(xi));
for i=1:n
3
7. l=1;
L=1;
M=0;
for j=1:n
if i~=j
l=l.*(xi-x(j))/(x(i)-x(j));%polinomio lagrange
L=L.*1/(x(i)-x(j)); %factor constante en derivada
M=M+(x(i)-x(j));% acumulando derivadas
F=L.*M ; %resultado delagrange derivado
hj=((1-2.*(xi-x(i)).*F)).*l.^2; %coeficiente en hemite
gj=(xi-x(i)).*l.^2 ;%coeficiente en hemite
end
end
yi=hj.*y(i)+gj.*dy(i);
p=p+yi;
end
p
1
Ejemplo 2. Sea f (x) = x2 +1
la funci´n a interpolar, con los siguientes datos adicionales:
o
i=0 i=1 i=2 i=3 i=4
xi −2 −1 0 1 2
yi 1/5 1/2 1 1/2 1/5
′
yi 4/25 1/2 0 −1/2 −4/25 .
Cuadro 2:
Evaluar el polinomio de Hermite en los valores {−1 · 5, −0 · 5, 0 · 5, 1 · 5} .
Soluci´n:
o
Usando la funci´n “Hermite” en MatLab, ingresamos la orden :
o
Hermite([-2 -1 0 1 2],[1/5 1/2 1 1/2 1/5],
[4/25 1/2 0 -1/2 -4/25],[-1.5 -0.5 0.5 1.5])
y se mostrar´ como respuesta:
a
p = 1.1099 0.5692 0.5692 1.1099
1.3 Funci´n Spline
o
Una “funci´n spline de grado k ” con valores conocidos en x0 , x1 , · · ·, xn es una funci´n S(x)
o o
formada por varios polinomios cada uno definido sobre un subintervalo [xi , xi+1 ] y se unen bajo las
siguientes condiciones de continuidad:
• En el intervalo [xi , xi+1 >, S(x) es un polinomio de grado menor o igual a k .
• S(x) admite derivada continua de orden (k − 1) en [x0 , xn ] .
4
8. -La interpolaci´n m´s frecuente es por medio de splines de grado 3, llamados “splines c´ bicos”.
o a u
-MatLab tiene incorporado el interpolador “spline cubic”, se ejecuta siguiendo la siguiente sintaxis:
yi = spline(x, y, xi), donde los valores y representa los valores de la funci´n evaluada en los puntos
o
x y los puntos xi son los puntos a interpolar.
Ejemplo 3.
x = 0:10;
y = x.*cos(x);
xi = 0:.25:10;
yi = spline(x,y,xi);
hold on
plot(x,y,’o’,xi,yi) % ubicaci´n de los puntos dados
o
% y la gr´fica del polinomio interpolador
a
Figura 2:
1.4 Ejemplo de Aplicaci´n
o
Ejemplo 4. Con ayuda de la funci´n de Matlab ginput realice un dibujo de su mano. Para esto
o
coloque su mano en la pantalla de su monitor y seleccione unos 30 a 35 puntos del contorno de su
mano. Ahora imagine que las abscisas y las ordenadas de los datos que recolect´ son funciones de una
o
variable independiente que va desde 1 hasta el n´mero de puntos. Luego realice una interpolaci´n de
u o
cada una de estas tablas en una rejilla muy fina. Seleccione el m´todo de interpolaci´n que considere
e o
el mejor para este caso.
Soluci´n: Definimos en MatLab la siguiente funci´n que realiza lo pedido:
o o
% N es numero de puntos
%get consigue las propiedades del objeto
%get(h,’PropertyName’)
%screensize tama~o de la pantalla
n
%figure(’position’,get(0,’screensize’))
% ginput permite seleccionar puntos de la figura con el mouse
function mano(N)
figure(’position’,get(0,’screensize’))
axes(’position’,[0 0 1 1])
[x,y] = ginput(N);
5
9. N = length(x);
n =(1:N)’;
xi=(1:0.05:N)’;
u = spline(n,x,xi);
v = spline(n,y,xi);
plot(x,y,’ro’,u,v,’-’);
2 Ra´
ıces de Ecuaciones
En esta secci´n nos ocuparemos de encontrar las ra´ de ecuaciones no lineales. Esto es, encontrar
o ıces
los ceros de funciones. El proceso a seguir es:
• Ubicar intervalos [aj , bj ] en donde se encuentran las ra´
ıces, para esto hacemos uso del Teorema
del Valor Intermedio . Podemos optar por hacer la gr´fica de la funci´n .
a o
• En cada intervalo contruir una sucesi´n xn ∈ [aj , bj ] tal que limn→∞ xn = rj , donde rj es
o
un cero de la fuci´n.
o
• Lo anterior es un proceso iterativo mediante el cual se busca encontrar una mejor aproximaci´n
o
de los ceros de una funci´n. Se termina cuando se impone alg´n criterio de tolerancia. Por
o u
ejemplo : |xn+1 − xn | < ǫ, para ǫ > 0 bastante peque˜ o.n
3 Presentaci´n de Algunos M´todos.
o e
Presentaremos la implementaci´n de algunos m´todos en Matlab mediante un ejemplo:
o e
Ejemplo 5. Hallar las ra´
ıces de la ecuaci´n:
o
sin(sqrt(sec(x) + (x3 ) ∗ exp(5 ∗ x/tan(x)))) − exp(−1 ∗ x) = 0
en el intervalo [0 · 17, 0 · 81] .
Primero definimos una funci´n en Matlab:
o
function y=f(x)
y=sin(sqrt(sec(x)+(x^3)*exp(5*x/tan(x))))-exp(-1*x); .
La cual es guardada con el nombre de f .
3.1 M´todo de Bisecci´n
e o
Definimos una funci´n para este m´todo:
o e
function MB=biseccion(a,b,f,tol);
% Esta funci´n aplica el m´todo de bisecci´n para
o e o
% ubicar raices.
% a y b son extremos del intervalo donde se ubica la ra´z
ı
% n indica el n´mero de la iteraci´n
u o
6
10. % f es la funci´n
o
% tol= tolerancia
error=1;%error inicial
f_ant=feval(f,b);
% f_ant indica f anterior ,feval(f,b)indica f evaluado en b.
n=1; while (error>tol)
f_a=feval(f,a);
f_b=feval(f,b);
m =(a+b)/2;
f_m=feval(f,m);
error=abs(f_m-f_ant);
fprintf(’n=%d, a= %5.8f,b=%5.8f,m=%5.8f,f(m)=%5.8f,
error=%5.8fn’,n,a,b,m,f_m,error)
if f_a == 0,
W=sprintf(’n ra´z en x = %5.8f ’, a);
ı
disp(W);
return
end
if f_b == 0
W=sprintf(’n ra´z en x = %5.8f ’, b);
ı
disp(W);
return
end
if (f_a*f_m)<0
b= m;
else
a= m;
end
f_ant=f_m;
n=n+1;
end;
W=sprintf(’n ra´z en x = %5.8f ’, m);
ı
disp(W);
Para nuestro ejemplo ejecutamos la orden:
biseccion(0.17,0.81,’f’,0.5*10^(-8)) ,
obteniendo como resultado:
ra´z en x = 0.32913022
ı .
3.2 M´todo de la Secante
e
Definimos una funci´n para este m´todo:
o e
function MS=secante(x1,x2,f,tol)
% Esta funci´n aplica el m´todo de la secante para ubicar
o e
7
11. % ra´ces de una funci´n.
ı o
% f es la funci´n que ingresamos (a ser llamada)
o
% tol es la tolerancia que deseamos
% x1 y x2 son los extremos iniciales del intervalo en
% el que est´ la ra´z
a ı
% delta es el tama~o del nuevo interv. en el q’ est´ la ra´z
n a ı
f1=feval(f,x1);
f2=feval(f,x2);
x_nuevo=x2;
for n=2:30
x=x2+f2*(x2-x1)/(f1-f2);
fx=feval(f,x);
x1=x2;
f1=f2;
delta=abs(x2-x);
x2=x;
f2=fx;
fprintf(’n = %d, x = %5.8f, fx = %5.8f n’,n,x,fx)
if delta < tol,
break,
end
end
fprintf(’n ra´z en x = %5.8f ’, x);
ı
Para nuestro ejemplo ejecutamos la orden:
secante(0.17,0.81,’f’,0.5*10^(-8)) ,
obtenemos como resultado:
ra´z en x = 0.32913022 .
ı
3.3 M´todo de Falsa Posici´n
e o
Definimos una funci´n para este m´todo:
o e
function MFP=falsaposicion(x1,x2,f,tol)
% Esta funci´n aplica el m´todo de Falsa Posici´n
o e o
% para hallar las ra´ces de una funci´n.
ı o
% f es la funci´n que ingresamos
o
% tol es la tolerancia que deseamos
% x1 y x2 son los extremos del intervalo donde se
% encuentra la ra´z
ı
f1=feval(f,x1); f2=feval(f,x2); x_nuevo=x2;
if f1*f2<0
for n=2:30
x=x2+f2*(x2-x1)/(f1-f2);
fx=feval(f,x);
8
12. if fx*f1>0
x1=x;f1=fx;
else
x2=x;f2=fx;
end
fprintf(’n = %d, x = %5.8f, fx = %5.8f n’,n,x,fx)
if abs(x_nuevo-x)<tol,
break,
end
x_nuevo=x;
end
else
disp(’La ra´z debe estar en el intervalo [x1,x2]’)
ı
end
fprintf(’n ra´z en x = %5.8f ’, x_nuevo);
ı
Para nuestro ejemplo ejecutamos la orden:
falsaposicion(0.17,0.81,’f’,0.5*10^(-8)) ,
obteniendo como resultado:
ra´z en x = 0.32913022
ı .
3.4 M´todo de Newton
e
Presentaremos la implementaci´n del m´todo de Newton en una variable. Este m´todo necesita a
o e e
diferencia de los anteriores,una aproximaci´n inicial de la ra´
o ız,tambi´n la derivada de la funci´n.
e o
Primero definimos una funci´n en MatLab para la derivada de la funci´n de la cual se quiere hallar
o o
su ra´
ız.
Para nuestro ejemplo:
function y=derivada(x)
y=1/2*cos((sec(x)+x^3*exp(5*x/tan(x)))^(1/2))/(sec(x)
+x^3*exp(5*x/tan(x)))^(1/2)*(sec(x)*tan(x)
+3*x^2*exp(5*x/tan(x))+x^3*(5/tan(x)
-5*x/tan(x)^2*(1+tan(x)^2))*exp(5*x/tan(x)))+exp(-x);
Implementaci´n de MatLab del m´todo de Newton para una variable:
o e
function N=newton1v(xo,f,df,tol)
% Esta funci´n aplica elm´todo de una variable
o e
% para hallar la ra´z de una funci´n.
ı o
% xo es la aproximacion inicial de la ra´z
ı
% f es la funcion
% df es la derivada de la funcion
9
13. % tol=tolerancia
error=1; x_ant=xo; n=1; while (error>tol)
x_nuevo=x_ant-feval(f,x_ant)/feval(df,x_ant);
error=abs(x_nuevo-x_ant);
W=fprintf(’n=%d,x_ant=%5.8f,x_nuevo=%5.8f,
error=%5.8f’,n,x_ant,x_nuevo,error);
disp(W);
x_ant=x_nuevo;
n=n+1;
end;
fprintf(’n ra´z en x=%5.8f’,x_ant);
ı
Para nuestro ejemplo ejecutamos la orden:
newton1v(0.30,’f’,’derivada’,0.5*10^(-8)) ,
obteniendo como resultado:
ra´z en x=0.32913022
ı .
4 Derivada de una funci´n
o
Ejemplo 6. Considere la funci´n f (x) = xexp(x) . Determinar aproximaciones de f ′ (2) , para
o
cada uno de los siguientes pasos h = 0 · 5, 0 · 45, · · ·, 0 · 05 ; usando las f´rmulas de diferencia hacia
o
atr´s, diferencia hacia delante y diferencia central. Para visualizar como la aproximaci´n mejora con
a o
el decrecimiento del paso, graficar el error como funci´n de h en cada caso.
o
soluci´n:
o
Diferencia hacia adelante:
%derivada de la funci´n Y =x.*exp(x) en el punto x=2
o
%usando diferencia hacia adelante con dos puntos,
%se grafica el error como funci´n del paso.
o
xo=2;
h=0.5:-0.05:0.05;
n = length(h)-1;
disp(’ DIFERENCIA HACIA ADELANTE ’);
for j=1:length(h)
x1=xo;
x2=xo+h;
y1=x1.*exp(x1);
y2=x2.*exp(x2);
y=(y2-y1)./(h);
end
fprintf(’n h=%5.2f’,h);
fprintf(’n y=%5.8f’,y);
w=abs(exp(2)+2.*exp(2)- y);%error
plot(h,abs(exp(2)+2.*exp(2)- y),’ro’), grid
10
14. Diferencia hacia atr´s:
a
%derivada de la funci´n Y =x.*exp(x) en elpunto x=2 usando
o
%diferencia hacia atras con dos puntos, se grafica el
%error como funci´n del paso.
o
xo=2;
h=0.5:-0.05:0.05;
n = length(h)-1;
disp(’ DIFERENCIA HACIA ATRAS ’);
for j=1:length(h)
x1=xo;
x2=xo-h;
y1=x1.*exp(x1);
y2=x2.*exp(x2);
y=(y1-y2)./(h);
end
fprintf(’n h=%5.2f’,h);
fprintf(’n y=%5.8f’,y);
w=abs(exp(2)+2.*exp(2)- y);%error
plot(h,abs(exp(2)+2.*exp(2)- y),’ro’), grid
Diferencia central:
%derivada de la funci´n Y =x.*exp(x) en el
o
%punto x=2 usando diferencia central con dos
%puntos, se grafica el error como funci´n del paso
o
xo=2;
h=0.5:-0.05:0.05;
n =length(h)-1;
disp(’ DIFERENCIA CENTRAL ’);
for j=1:length(h)
x1=xo-h;
x2=xo+h;
yo=xo.*exp(xo);
y1=x1.*exp(x1);
y2=x2.*exp(x2);
y=(y2-y1)./(2.*h);
end
fprintf(’n h=%5.2f’,h);
fprintf(’n y=%5.8f’,y);
w=abs(exp(2)+2.*exp(2)- y);%error
plot(h,abs(exp(2)+2.*exp(2)- y),’ro’), grid .
11
15. 5 Integraci´n
o
Ejemplo 7. Evaluar num´ricamente las siguientes integrales impropias realizando las transforma-
e
ciones que crea conveniente.
∞ 1
a) dx
0 1 + x2
1 cos(x)
b) √ dx
0 x
Soluci´n:
o
Parte a), definimos la siguiente funci´n en Matlab:
o
function integral
disp(’INTEGRAL DE f(x)=1/(1+x^2)’);
disp(’LIMITES DE INTEGRACION:a=0;b=infty’);
%Evaluamos de a=0 hasta c=1 y de c=1 hasta b=infty;
I1=trapecio(’h’,0,1,80);
%segundo desde c=1 hasta b=infty
%hacemos el cambio x=1/t
I2=trapecio(’g’,0,1,80);
disp(’EL VALOR DE LA INTEGRAL ES:’);
I=I1+I2
%inicio de la subfunci´n regla extendida del trapecio
o
function s = trapecio(f,a,b,m)
h = (b - a)/m; s = 0; for k=1:(m-1),
x = a + h*k;
s = s + feval(f,x);
end s = h*(feval(f,a)+feval(f,b))/2 + h*s;
% definiendo funciones
function h=h(x)
h=1/(1+x^2);
function g=g(t)
g= 1/(1+t^2); .
El valor de la integral es: I=1.5708 .
Parte b), definimos la siguiente funci´n en Matlab:
o
function integral_2
disp(’INTEGRAL DE f(x)=(cos(x))/(x^(1/2))’);
disp(’LIMITES DE INTEGRACION: a=0;b=1’);
%hacemos el cambio x=(t^2)
%integraremos g(t)=2cos(t^2)
%nuevos l´mites de integrac´n a=0 ,b=1.
ı o
disp(’EL VALOR DE LA INTEGRAL ES :’);
richarson(’g’,0,1,20)
%inicio de la subfunci´n richarson - trapecio
o
12
16. function [integral]=richarson(f,a,b,m)
format short
%-------------------------------------------
%EMPEZAMOS ALGORITMO DE RICHARSON PARA
%HALLAR LA integral de una funci´n
o
for i=1:length(m)
h=(b-a)./m;
delta=0.01; err=1; j=1;
I(1,1)=trapecio(f,a,b,m);
while err>delta && j<50
m=2.*m;
I(j+1,1)=trapecio(f,a,b,m);
for k=1:j
I(j+1,k+1)=(I(j,k)-(4^k)*I(j+1,k))/(1-4^k);
end
err=abs(I(j+1,j+1)-I(j,j));
j=j+1;
end [n ,n]= size(I);
end
I;
I(n,n)
%inicio de la subfunci´n regla
o
%extendida del trapecio
function s = trapecio(f,a,b,m)
h = (b - a)/m; s = 0; for k=1:(m-1),
x = a + h*k;
s = s + feval(f,x);
end
s = h*(feval(f,a)+feval(f,b))/2 + h*s;
% definiendo funci´n
o
function g=g(t)
g=2*cos(t^2); .
El valor de la integral es: I=1.8090 .
6 Ecuaciones Diferenciales
Para calcular, la soluci´n aproximada del problema: y ′ = f (t, y) en [to, tf ] con la condici´n inicial
o o
y(to) = yo; en MatLab se usan los comandos:
f=inline(’expresion de f(t,y)’,’t’,’y’)
ode23(f,[to,tf],yo) ,
esta orden calcula una aproximaci´n num´rica de la soluci´n y muestra una gr´fica.
o e o a
Ejemplo 8. Ejecutamos la orden:
13
17. f=inline(’-5*y+10’,’t’,’y’)
ode23(f,[0,3],0)
axis([-0.5 3 -0.5 3]),grid ,
se muestra la siguiente gr´fica:
a
3
2.5
2
1.5
1
0.5
0
−0.5
−0.5 0 0.5 1 1.5 2 2.5 3
Figura 3:
Tambi´m podemos hacer el c´lculo mediante la orden
e a
[t,y]=ode23(f,[t0,tf],y0) ,
la diferencia con la enterior,es que esta no muestra gr´fica.
a
6.1 Ley de Malthus
Ejemplo 9. Supongamos que el n´mero de habitantes de un pa´ en el a˜ o 2007 fue de 26.4 millones.
u ıs n
′
Y crece siguiendo la Ley (de Malthus) y = 0,05y, donde y(t) representa el n´mero de habitantes
u
en millones, en un instante t .
Estimar el n´mero de Habitantes en el a˜ o 2020.
u n
soluci´n: Datos: to=2007 ,yo=26.4,tf=2020. Ejecutamos la orden
o
f=inline(’0.05*y’,’t’,’y’)
ode23(f,[2007,2020],26.4) ;
usamos la orden ginput(1) para hallar en la gr´fica las coordenadas que me indican la soluci´n.
a o
Obteniendo como respuesta que en el a˜ o 2020 el n´ mero de habitantes es aproximadamente 50.6
n u
millones.
Implementamos una funci´n en MatLab para la soluci´n anal´
o o ıtica de este modelo:
14
18. function M=malthus(to,tf,yo)
%to=tiempo inicial,tf=tiempo final
% yo=y(to)
k=0.05; % constante de proporcionalidad, puede variar.
h=0.01; % incremento de tiempo,puede variar.
th=to:h:tf;
soluc=yo.*exp(k.*(th-to));
plot(th,soluc) .
Para nuestro ejemplo ingresamos la orden:
malthus(2007,2020,26.4) .
7 Bibliograf´
ıa
[1] Juan-Antonio Infante y Jos´ Mar´ Rey,
e ıa
Introducci´n a MATLAB(notas en internet).
o
[2] Nakamura, Shoichiro,
Numerical analysis and graphic visualization with MATLAB Upper Saddle River,
NJ : Prentice-Hall, 1996.
[3] W.H. Press, S.A. Teukolsky, W.T Vetterling, B.P. Flannery Numerical Recipes in C (2nd edition),
Cambridge University Press. 1992.
[3]Elizabeth Doig. Notas de clase del curso C´lculo Num´rico,
a e
Ciencias e Ingenier´
ıa-PUCP.
15