Sei sulla pagina 1di 15

10.

METODOS NUMERICOS CON MatLab

Lic. Mat. Amado Malca Villalobos

APLICACIONES DE ANALISIS NUMERICO


% Solucin de una ecuacin fplot('x*exp(-x)-0.2',[0 8]) grid sol1=fzero('x*exp(-x)-0.2',0.7) sol2=fzero('x*exp(-x)-0.2',3) sol3=fzero('x*exp(-x)-0.2',0.7,optimset('display','iter')) % maximos y minimos de una funcion fplot('x^3-12*x^2+40.25*x-36.5',[3 8]) [min fval]=fminbnd('x^3-12*x^2+40.25*x-36.5',3,8) fplot('x^3-12*x^2+40.25*x-36.5',[0 8]) [max fval2]=fminbnd('-1*(x^3-12*x^2+40.25*x-36.5)',-1,8) funcion %Integracion numerica clear val2=quad('1/(x^2+1)',1,2) format long val3=quad('1./(x.^2+1)',1,2) % integracin de simpson % integracin de simpson val4=quad('1./(x.^2+1)',1,2,0.0001) val5=quadl('1./(x.^2+1)',1,2) val6=quadl('fun',1,2) % % sale error % maximo de una % minimo de una funcion

% mtodo de lobatto

mtodo de lobatto

%Integracion de una funcin en formato de puntos x=[1 2 3 4 5 6 7 8 9]; y=[1 4 9 16 25 36 49 64 81]; val7=trapz(x,y)

Mtodo de Newton para resolver la ecuacin f(x) = 0

10. METODOS NUMERICOS CON MatLab

Lic. Mat. Amado Malca Villalobos

Este mtodo requiere de algunas condiciones para la funcin f, como son la derivada, que adems no se anule en el intervalo dado.

xn+ 1 = xn -

f (xn ) , " n = 0,1, 2,..... f '(xn )

x Resolviendo: e + x = 0

f (x)= ex + x

f '(x)= ex + 1

Las funciones de iteracion:


fun.m function y=fun(x) y=exp(x)+x; dfun.m function y=dfun(x) y=exp(x)+1;

El programa que resuelve la ecuacin


newton.m

function [resultado,iteraciones]=newton(fun,dfun,x,precision) % Metodo del punto fijo para resolver fun(x) = 0 % % Variables de entrada % fun: La funcin % dfun: La derivada de la funcion fun % x: El valor inicial de la raiz % tolerancia: El valor mximo del error % Variables de salida % resultado: La solucion aproximada % iteraciones: El numero de iteraciones iteraciones=0; x0=x; d=feval(fun,x0)/feval(dfun,x0) while abs(d)>precision x1=x0-d; iteraciones=iteraciones+1; x0=x1; d=feval(fun,x0)/feval(dfun,x0); end; resultado=x0;

Resultado en la ventana de comandos de MatLab:

>> [resultado,iteraciones]=newton('fun','dfun',0,0.001) d = 0.500000000000000 resultado = -0.566311003197218 iteraciones = 2

10. METODOS NUMERICOS CON MatLab


>> [resultado,iteraciones]=newton('fun','dfun',0,0.00001) d = 0.500000000000000 resultado = -0.567143165034862 iteraciones = >> 3

Lic. Mat. Amado Malca Villalobos

METODO DEL PUNTO FIJO Funcin: e x + x = 0 , equivalente a: x = - e x , punto fijo en [-1, 0] Programa en MatLab
pfijo.m function [sol,x,err,k]=pfijo(g,x1,tol,maxiter)

% Aplica punto fijo a la expresion: x = g(x) en el intervalo [a, b] % % Variables de entrada % g: funcion % xi: valor inicial de la raiz % tol: precision deseada % maxiter: tope de iteraciones % sol: solucion aproximada % x: vector de iteraciones % err distancia entre los dos ultimos % k: nmero de iteraciones sol=0; x(1)=x1; err=tol+1; sol=x(1); k=1; while err>tol & k<maxiter x(k+1)=feval(g,x(k)); err=abs(x(k+1)-x(k)); k=k+1; end if err>tol; sol=[]; disp('Insuficientes iteraciones') else sol=x(k); end

El archivo de la funcin es:


g.m function y=g(x) y=-exp(x);

10. METODOS NUMERICOS CON MatLab


Ejecutando en la ventana de comandos de MatLab

Lic. Mat. Amado Malca Villalobos

>> [sol,x,incr,k]=pfijo('g',1,0.001,10) insuficientes iteraciones sol = [] x = 1.0000 -2.7183 -0.0660 -0.9361 -0.3921 -0.6756 -0.5088 -0.6012 -0.5482 -0.5780 incr = 0.0299 k = 10 >> [sol,x,incr,k]=pfijo('g',1,0.001,40) sol = -0.5675 x = 1.0000 -2.7183 -0.0660 -0.9361 -0.3921 -0.6756 -0.5088 -0.6012 -0.5482 -0.5780 -0.5610 -0.5706 -0.5652 -0.5683 -0.5665 -0.5675 incr = 9.9594e-004 k = 16 >> METODO DE BISECCION: resolviendo x = G (x)
Funcin: e x + x = 0 , equivalente a: x = - e x
g(x) = exp(x)
f(x)=exp(x)+x, x en [-100,5] 200

h(x) = -x

en [-2,0]

2 1.8

150

1.6 1.4

eje de las ordenadas

100

1.2 1 0.8

50

0.6 0.4

-50

0.2
-100 -100

-80

-60

-40 -20 eje de las abscisas

20

0 -2

-1.8

-1.6

-1.4

-1.2

-1

-0.8

-0.6

-0.4

-0.2

Tiene una raz en el intervalo: [-1, 0] MTODO DE BISECCIN Programa en MatLab

10. METODOS NUMERICOS CON MatLab

Lic. Mat. Amado Malca Villalobos

biseccion.m function [sol,x,err,iter]=biseccion(fun,a,b,tol,maxiter) % Aplica biseccion a la funcion f en el intervalo [a, b] % Variables de entrada % tol: precision deseada % maxiter: tope de iteraciones % sol: solucion aproximada % x: vector de iteraciones % err: distancia entre los dos ultimos % iter: nmero de iteraciones sol=0; x=[]; err=b-a; sol=0; iter=0; fa=feval(fun,a); fb=feval(fun,b); if fa*fb>0; disp('La funcion debe tener diferente signo en los extremos del intervalo') return end while err>tol & iter<maxiter c=(a+b)/2; x=[x,c]; fc=feval(fun,c); if fc==0; a=c;b=c; elseif fa*fc<0; b=c; fb=fc; else fb*fc<0; a=c; fa=fc; end % casualidad de que c sea la solucin % cambio de signo en [a, c]

% cambio de signo en [c, b]

err=b-a;iter=iter+1; % contador de iteraciones end sol=c; % solucion de salida if err>tol; disp('Insuficientes iteraciones') end

El archivo de la funcin es:


fun.m function y=fun(x) y=exp(x)+x;

Ejecutando en la ventana de comandos de MatLab

>> [sol,x,incr,iter]=biseccion('fun',1 ,8,0.0001,40) la funcion debe tener diferente signo en los extremos del intervalo sol = 0 x = [] incr = 7 iter = 0 >> [sol,x,incr,iter]=biseccion('fun',-1 ,8,0.0001,40)

10. METODOS NUMERICOS CON MatLab

Lic. Mat. Amado Malca Villalobos

sol = -0.5672 x = 3.5000 1.2500 0.1250 -0.4375 -0.7188 -0.5781 -0.5078 -0.5430 -0.5605 -0.5693 -0.5649 -0.5671 -0.5682 -0.5677 -0.5674 -0.5673 -0.5672 incr = 6.8665e-005 iter = 17 >> [sol,x,incr,iter]=biseccion('fun',-1 ,8,0.0001,10) insuficientes iteraciones sol = -0.5693 x = 3.5000 1.2500 0.1250 -0.4375 -0.7188 -0.5781 -0.5078 -0.5430 -0.5605 -0.5693 incr = 0.0088 iter = 10 >> METODO DE LA SECANTE Aproximacin a una raz de f(x)=0 a partir de unos valores inciales p0 y p1 mediante la iteracin Programa en MatLab
secante.m function [p1,err,k,y]=secant(fun,p0,p1,delta,epsilon,max1) % Aplica biseccion a la funcion f en el intervalo [a, b] % % Variables de entrada % fun: la funcion en forma de cadena de caracteres 'f' % p0 y p1 son las aproximaciones iniciales a un cero de f % delta: tolerancia para p1 % epsilon: tolerancia para el valor de f en el cero % max1: es el numero maximo de iteraciones % % Variables de salida % p1: es la aproximacion del cero % err: es el error final obtenido % k: el numero de iteraciones % y=fun(p1) err=1;k=0;y=feval(fun,p1); for k=1:max1 p2=p1-feval(fun,p1)*(p1-p0)/(feval(fun,p1)feval(fun,p0)); err=abs(p2-p1); relerr=2*err/(abs(p2)+delta); p0=p1; p1=p2; y=feval(fun,p1); if (err<delta) | (relerr<delta) | (abs(y)<epsilon),return,end %break,end end

El archivo de la funcin es:

10. METODOS NUMERICOS CON MatLab


fun.m function y=g(x) y=exp(x)+x;

Lic. Mat. Amado Malca Villalobos

Ejecutando en la ventana de comandos de MatLab

>> [p1,err,k,y]=secant('fun',-1,0,0.01,0.001,40) p1 = -0.5671 err = 0.0051 k= 3 y = 6.4583e-005 >> Numero Combinatorio Calculando el factorial de un entero no negativo mediante un bucle
function f=buclefact(n) % Calculande el factorial n mediante un bucle, % n debe ser entero no negativo f=1; if n<0; disp('n debe ser entero no negativo') else for k=2:n f=f*k; end end

>> buclefact(0) ans = 1 >> buclefact(1) ans = 1 >> buclefact(2) ans = 2 >> buclefact(8) ans = 40320 >> Calculando el factorial de un entero no negativo mediante el comando prod >> prod(1:8) ans = 40320 >>

n Calculando el numero combinatorio k Usando la formula anterior


function c=numcombin(n,k)

10. METODOS NUMERICOS CON MatLab


% Calcula el numero combinatorio, % con la formula del cociente de factoriales if n-k<0 disp('Ingrese numeros adecuados') return else c=buclefact(n)/buclefact(k)/buclefact(n-k); end

Lic. Mat. Amado Malca Villalobos

>> numcombin(30,6) ans = 593775 >> numcombin(3,12) Ingrese numeros adecuados >>

n Calculando el numero combinatorio k


Usando la formula desarrollada de productos
function c=numcombin2(n,k) % Calcula el numero combinatorio, % con su formula directa c=1; if n-k<0 disp('Ingrese numeros adecuados') return else for r=1:k c=c*(n-r+1)/r; end end

>> numcombin2(3,12) Ingrese numeros adecuados ans = 1 >> numcombin2(13,12) ans = 13 >> numcombin2(13,7) ans = 1716 >> Teclear lo siguiente >> help nchoosek >> type nchoosek Hallando la n esima fila del triangulo de Pascal

10. METODOS NUMERICOS CON MatLab

Lic. Mat. Amado Malca Villalobos

function C=tartaglia(n) % Calcula la n esima fila del triangulo de Tartaglia C=1; if n<0 disp('Ingrese numeros adecuados') return else for r=1:n C(r+1)=C(r)*(n-r+1)/r; end end

>> tartaglia(5) ans = 1 5 10 >> tar

10

function C=tartaglia2(n) % Calcula la n esima fila del triangulo de Tartaglia v=[1 1]; disp(v) for r=2:n v=[v 0]+[0 v]; disp(v) end

>> tartaglia2(5) 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 >>

SISTEMA LINEAL TRIANGULAR Resolucin de un sistema triangular superior: AX=B, por el mtodo de sustitucin regresiva. El mtodo funciona Siempre los elementos de la diagonal sean no nulos

xn =

b (n) an n

b (k )xk =

ak r xr , k = n - 1, n - 2,...,1

r= k + 1

ak k

Programa: sustiregresiva.m

10. METODOS NUMERICOS CON MatLab

Lic. Mat. Amado Malca Villalobos

function X=sustiregresiva(A,B) % Datos % A es una matriz triangular superior, invertible de orden n % B es una matriz de orden n por 1 (columna) % Resultado %X es la solucion del sistema lineal AX=B % n=length(B); X=zeros(n,1); X(n)=B(n)/A(n,n); for k=n-1:-1:1 X(k)=(B(k)-A(k,k+1:n)*X(k+1:n))/A(k,k); end

Ejecucin en la ventana de comandos >> A=[1 2 3 8;0 4 5 7;0 0 6 6;0 0 0 2];B=[8; 3; 5;7]; >> sustiregresiva(A,B) ans = -7.9167 -2.0417 -2.6667 3.5000 >>

GRAFICA DE LOS VECTORES DE DIRECCIN DE UNA ECUACIN DIFERENCIAL ORDINARIA


%Considere una funcin z = f(t,y) continua en [t0,t1]x[c,d] %Y sea al ecuacin diferencial: y' = f(t,y), con y(t0)= y0 %Considere f(t,y)=(t-y)/2 % Si y(0)=1, entonces y(t)= 3e^(-t/2) - 2 +t % Si y(0)=4, entonces y(t)= 6e^(-t/2) - 2 +t [t,y]=meshgrid(1:5,4:-1:1) dt=ones(4,5) dy=(t-y)/2 quiver(t,y,dt,dy) hold on x=1:0.01:6

10

10. METODOS NUMERICOS CON MatLab


z1=3*exp(-x/2)-2+x z2=6*exp(-x/2)-2+x plot(x,z1,x,z2) hold off
4.5 4 3.5 3 2.5 2 1.5 1 0.5

Lic. Mat. Amado Malca Villalobos

1.5

2.5

3.5

4.5

5.5

Mtodo de Euler para resolver una ecuacin diferencial Construccin de las aproximaciones a la solucin del problema inicial: y ' = f (t , y) con y (a)= y0 continua en [a, b] [c, d ] dadas por Programa: euler.m

yk + 1 = yk + h f (tk , yk ), k = 0,1,...., M - 1.

function E=euler(f,a,b,ya,M) % Considere una funcin z = f(t,y) continua en [t0,t1]x[c,d] % Y sea al ecuacin diferencial: y' = f(t,y), con y(t0)= y0 % Datos % f es la funcin en forma de caracteres 'f' % a y b son los extremos del intervalo de definicin % ya es la condicin inicial y(a) % M es el numero de pasos % %Resultado % E=[T' Y'] %es una matriz columna, donde T son las abscisas %e Y son las ordenadas h=(b-a)/M T=zeros(1,M+1) Y=zeros(1,M+1) T=a:h:b; Y(1)=ya; for k=1:1:M Y(k+1)=Y(k)+h+feval(f,T(k),Y(k)) end E=[T' Y'] % Graficando la solucion x=E(:,1);y=E(:,2);plot(x,y),grid

11

10. METODOS NUMERICOS CON MatLab Ejecucin en MatLab >> E=euler('f',0,3,1,30) E= 0 1.0000 0.1000 0.6000 0.2000 0.4500 0.3000 0.4250 2.9000 2.9000 3.0000 3.0000 >>

Lic. Mat. Amado Malca Villalobos

SOLUCION DE UNA ECUACION DIFERENCIAL Metodo de Heun Construccin de las aproximaciones a la solucin del problema inicial: y ' = f (t , y) con y (a)= y0 continua en [a, b] [c, d ] dadas por

yk + 1 = yk +
Programa:

h f t , y + f (tk + 1 , yk + h * f (tk , yk )) , k = 0,1,...., M - 1. (k k) 2


heun.m

function E=heun(f,a,b,ya,M) % Considere una funcin z = f(t,y) continua en [t0,t1]x[c,d] % Y sea al ecuacin diferencial: y' = f(t,y), con y(t0)= y0 % Datos % f es la funcion en forma de caracteres 'f' % a y b son los extremos del intervalo de definicion % ya es la condicion inicial y(a) % M es el numero de pasos % %Resultado % H=[T' Y'] %es una matriz columna, donde T son las abscisas %e Y son las ordenadas h=(b-a)/M; T=zeros(1,M+1); Y=zeros(1,M+1); T=a:h:b; Y(1)=ya; for k=1:1:M k1=feval(f,T(k),Y(k)); k2=feval(f,T(k+1),Y(k)+h*k1);

12

10. METODOS NUMERICOS CON MatLab


Y(k+1)=Y(k)+h+(h/2)*(k1+k2); end E=[T' Y']; % Graficando la solucion x=E(:,1);y=E(:,2);plot(x,y),grid

Lic. Mat. Amado Malca Villalobos

Ejecucion en la ventana de comandos >> E=heun('f',0,3,1,30) E= 0 1.0000 0.1000 1.0538 0.2000 1.1098 .. 2.9000 3.1740 3.0000 3.2631 >>

SOLUCION DE UNA ECUACION DIFERENCIAL Mtodo de Taylor de orden 4 Construccin de las aproximaciones a la solucin del problema inicial: y ' = f (t , y) con y (a)= y0 continua en [a, b] [c, d ], evaluando y '', y ''' e y '''' y usando el polinomio de Taylor en cada paso.

Fractal de Feigenbaum
http://mimosa.pntic.mec.es/jgomez53/matema/conocer/fractales.htm

Un problema similar tiene lugar en la ecologa, y la prediccin de las poblaciones biolgicas. La ecuacin sera simple si la poblacin slo creciera de forma indefinida, pero los efectos de los predadores y un suministro de alimento limitado hacen esta ecuacin incorrecta. La ecuacin ms simple que tiene esto en cuenta es la siguiente: Poblacin del ao siguiente = r * poblacin de este ao * (1 poblacin de este ao) En esta ecuacin, la poblacin es un nmero entre 0 y 1, donde 1 representa el mximo de poblacin posible y el 0 la extincin. R es la tasa de crecimiento. La pregunta era, Cmo afectan estos parmetros a la ecuacin?. La respuesta obvia es que una mayor tasa de crecimiento implica que un aumento en la poblacin, mientras que una menor tasa de crecimiento decrementar el nmero. Esta tendencia es cierta para algunas tasas de crecimiento, pero no para todas ellas.

13

10. METODOS NUMERICOS CON MatLab

Lic. Mat. Amado Malca Villalobos

Un bilogo, Robert May, decidi ver qu suceda con las ecuaciones cuando cambiaba el valor de la tasa de crecimiento. A valores bajos de tasa de crecimiento, la poblacin se establecera en un nico nmero. Por ejemplo, si la tasa de crecimiento es 2,7, la poblacin se establecer en 0,6292. Cuando se incrementa la tasa de crecimiento, la poblacin final se incrementara tambin. Entonces, sucedi algo extrao. Tan pronto como la tasa de crecimiento pasaba de 3, la lnea se rompa en dos. En lugar de establecerse en una nica poblacin, saltara entre dos poblaciones distintas. Tendra un valor para un ao, otro para el siguiente, repitiendo el ciclo para siempre. Incrementar la tasa de crecimiento un poco ms provoc que saltara entre cuatro valores distintos. Cuando el parmetro creca an ms, la lnea se bifurcaba de nuevo. Las bifurcaciones llegaban ms y ms rpidamente hasta que de pronto, apareca el caos. Pasada una cierta tasa de crecimiento, se haca imposible predecir el comportamiento de la ecuacin. Sin embargo, bajo una inspeccin ms detallada, es posible ver lneas claras. Mirando ms de cerca, estas lneas revelan pequeas ventanas de orden, donde la ecuacin va a travs de las bifurcaciones de nuevo antes de volver al caos. Esta auto-similitud, el hecho de que el grfico tenga una copia exacta de s mismo oculta en su interior, viene a ser un aspecto importante del caos.

Figura 3: El diagrama de bifurcacin para la ecuacin de poblaciones. (James Gleick, Caos Creando una Nueva Ciencia, pgina 71)
La ecuacin Logistica x = ax(1- x), a > 0 es una ecuacin de punto fijo que modela una poblacin,

cuyo crecimiento esta limitado. Donde los iterados pueden presentar un comportamiento catico. Los puntos fijos son 0 y 1-1/a
Ffunction feigenbaum
% fractal de Feigenbaum p=0;q=4;

14

10. METODOS NUMERICOS CON MatLab


r=0;s=1; h=(q-p)/500; X=zeros(1,100001); Y=X; c=1; for a =p:h:q x=0.5; for k=1:400 x=a*x*(1-x) if k>200 X(c)=a; Y(c)=x; c=c+1; end end c-1 end plot(X,Y,'-','markersize',1) axis([p,q,r,s])

Lic. Mat. Amado Malca Villalobos

Ejecutando en la ventana de comandos


1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0

0.5

1.5

2.5

3.5

15