10 Metodos Numericos

April 12, 2023 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download 10 Metodos Numericos...

Description

 

10. METODOS NUMERICOS CON MatLab Lic. Mat. Amado Malca Villalobos APLICACIONES DE ANALISIS NUMERICO % Solución de una ecuación ecuación   

fplot('x*exp(-x)-0.2' fplot( 'x*exp(-x)-0.2',[0 ,[0 8]) grid sol1=fzero('x*exp(-x)-0.2',0.7) sol1=fzero('x*exp(-x)-0.2' ,0.7) ,3) sol2=fzero('x*exp(-x)-0.2',3) sol2=fzero('x*exp(-x)-0.2' sol3=fzero('x*exp(-x)-0.2',0.7,optimset( sol3=fzero('x*exp(-x)-0.2' ,0.7,optimset('display' 'display', ,'iter' 'iter')) ))

% maximos y minimos de una funcion  funcion  fplot('x^3-12*x^2+40.25*x-36.5',[3 fplot('x^3-12*x^2+40.25*x-36.5' ,[3 8]) [min fval]=fminbnd( fval]=fminbnd('x^3-12*x^2+40.25*x-36.5' 'x^3-12*x^2+40.25*x-36.5',3,8) ,3,8)

% minimo de una funcion  funcion 

,[0 8]) fplot('x^3-12*x^2+40.25*x-36.5',[0 fplot('x^3-12*x^2+40.25*x-36.5' [max fval2]=fminbnd( fval2]=fminbnd('-1*(x^3-12*x^2+40.25*x-36.5)' '-1*(x^3-12*x^2+40.25*x-36.5)',-1,8) ,-1,8)

% maximo de una

funcion  funcion   %Integracion numerica numerica    clear val2=quad('1/(x^2+1)',1,2) val2=quad('1/(x^2+1)',1,2)

% sale error error   

format long  long  val3=quad('1./(x.^2+1)',1,2) val3=quad('1./(x.^2+1)' ,1,2)

% integración de simpson simpson   

val4=quad('1./(x.^2+1)',1,2,0.0001) val4=quad('1./(x.^2+1)' ,1,2,0.0001)

val5=quadl('1./(x.^2+1)' val5=quadl( '1./(x.^2+1)',1,2) ,1,2) ,1,2) val6=quadl('fun',1,2) val6=quadl('fun'

%

% integración de simpson simpson   

% método de lobatto lobatto   

método de lobatto lobatto   

%Integracion de una función en formato de puntos 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)

Método de Newton para resolver la ecuación f(x) = 0

1

 

10. METODOS NUMERICOS CON MatLab Lic. Mat. Amado Malca Villalobos Este método requiere de algunas condiciones para la función f, como son la derivada, que además no se anule en el intervalo dado.

 xn+ 1 = xn -

 f (xn )  f '(xn )

, " n = 0,1,2,. ,2,......  

 x

Resolviendo: e + x = 0  

 f (x)= e x + x  

 f '(x)= e x + 1  

Las funciones de iteracion:

fun.m

dfun.m

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

function y=dfun(x) y=exp(x)+1; 

El programa que resuelve la ecuación newton.m function  function  [resultado,iteraciones]=newton(fun,dfun,x,precision) % Metodo del punto fijo para resolver fun(x) = 0  0  %  entrada  % Variables de entrada  % fun: La función % dfun: La derivada de la funcion fun fun    % x: El valor inicial de la raiz   % tolerancia: El valor máximo del error error    % Variables de salida  salida  % resultado: La solucion aproximada  aproximada   % iteraciones: El numero de iteraciones  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; end; resultado=x0; 

Resultado en la ventana de comandos de MatLab:

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

2

2

 

10. METODOS NUMERICOS CON MatLab Lic. Mat. Amado Malca Villalobos >> [resultado,iteraciones]=newton('fun [re sultado,iteraciones]=newton('fun','dfun',0,0.00001) ','dfun',0,0.00001) d = 0.500000000000000 resultado = -0.567143165034862 iteraciones =

3

>>

METODO DEL PUNTO FIJO  x

 x

Función: e + x = 0 , equivalente a:  x = - e , 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] b]    %  % Variables de entrada  entrada  funcion  % g: funcion  % xi: valor inicial de la raiz  raiz  deseada    % tol: precision deseada % maxiter: tope de iteraciones iteraciones    % sol: solucion aproximada  aproximada  iteraciones  % x: vector de iteraciones  % err distancia entre los dos ultimos  ultimos  iteraciones  % k: número de iteraciones  sol=0; x(1)=x1; err=tol+1; sol=x(1); k=1; while err>tol & ktol; sol=[]; 'Insuficientes iteraciones') disp('Insuficientes disp( iteraciones') else else    sol=x(k); end  end 

El archivo de la función es:

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

3

 

10. METODOS NUMERICOS CON MatLab Lic. Mat. Amado Malca Villalobos Ejecutando en la ventana de comandos de MatLab

>> [sol,x,incr,k]=pfijo('g',1,0.001,10) insuficientes iteraciones sol = [] x = 1.0000 -2.7183 -0.0 -0.0660 660 -0.9361 -0.3921 -0.6756 -0.5088 -0.5 088 -0.6012 -0.601 2 -0.5482 -0.5780 incr = 0.0299 k>>= [sol,x,incr,k]=pfijo('g',1,0.001,40) 10 sol = -0.5675 x = 1.0000 -2.7183 -0.0 -0.0660 660 -0.9361 -0.392 -0.39211 -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)   x

 x

Función: e + x = 0 , equivalente a:  x = - e   g(x) = exp(x)

h(x) = -x

en [-2,0]

2

f(x)=exp(x)+x, x en [-100,5] 200

1.8 1.6

150

1.4   s   a    d   a   n   e    d   r   o     s   a    l     e    d     e    j   e

100

1.2 1

50

0.8 0

0.6 0.4

-50

0.2 -100 -100

-80

-60

-40 -20 eje de las abscisas

0

0 -2

20

Tiene una raíz en el intervalo: [-1, 0] MËTODO DE BISECCIÓN Programa en MatLab

4

-1. 8

-1. 6

-1. 4

-1. 2

-1

-0. 8

-0.6

-0.4

-0.2

0

 

10. METODOS NUMERICOS CON MatLab Lic. Mat. Amado Malca Villalobos  biseccion.m function [sol,x,err,iter]=biseccion(fun,a,b,tol,maxiter) b]  % Aplica biseccion a la funcion f en el intervalo [a, b]  % Variables de entrada  entrada  % tol: precision deseada deseada    % maxiter: tope de iteraciones iteraciones    aproximada  % sol: solucion aproximada  % x: vector de iteraciones  iteraciones  ultimos  % err: distancia entre los dos ultimos  % iter: número de iteraciones sol=0; x=[]; err=b-a; sol=0; iter=0; fa=feval(fun,a); fb=feval(fun,b); if fa*fb>0; 'La funcion debe tener diferente signo en los disp('La disp( extremos del intervalo') intervalo') return return    end    end while err>tol & iter [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)

5

 

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 Aproximación a una raíz de f(x)=0 a partir de unos valores iníciales p0 y p1 mediante la iteración 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]  b]  %  entrada  % Variables de entrada  % fun: la funcion en forma de cadena de caracteres 'f'  'f'  f  % p0 y p1 son las aproximaciones iniciales a un cero de f  p1    % delta: tolerancia para p1 % epsilon: tolerancia para el valor de f en el cero cero    % max1: es el numero maximo de iteraciones iteraciones    % % Variables de salida  salida  % p1: es la aproximacion del cero  cero  % err: es el error final obtenido  obtenido  iteraciones  % k: el numero de iteraciones  % y=fun(p1)  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

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> 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)  

7

 

10. METODOS NUMERICOS CON MatLab Lic. Mat. Amado Malca Villalobos % Calcula el numero combinatorio,   % con la formula del cociente de factoriales   if n-k> 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> 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

8

 

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> tartaglia(5) ans = 1 5 10 10 >> tar 

5

1

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

5

10

10

1 5

1

SISTEMA LINEAL TRIANGULAR  Resolución de un sistema triangular superior: AX=B, por el método método de sustitución regresiva. El método funciona Siempre los elementos de la diagonal sean no nulos n

 xn

=

b (n) an n

b (k )- å  

 xk  =

r = k + 1

ak k 

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

Programa: sustiregresiva.m

9

 

10. METODOS NUMERICOS CON MatLab Lic. Mat. Amado Malca Villalobos function X=sustiregresiva(A,B) Datos    % Datos % A es una matriz triangular superior, invertible de orden n  % B es una matriz de orden n por 1 (columna) (columna)    Resultado  % Resultado  %X es la solucion del sistema lineal AX=B 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    end

Ejecución 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 DIRECCIÓN DE UNA ECUACIÓN DIFERENCIAL ORDINARIA %Considere una función z = f(t,y) continua en [t0,t1]x[c,d]   y' = f(t,y), con y(t0)= y0  %Y sea al ecuación diferencial: %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 Lic. Mat. Amado Malca Villalobos 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

1

1. 5

2

2. 5

3

3.5

4

4. 5

5

5.5

6

Método de Euler para resolver una ecuación diferencial Construcción de las aproximaciones a la solución del problema inicial:  y ' = f (t , y) con  y (a)= y0   continua en [a, b]´ [c, d ]  dadas por

Programa:

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

euler.m

function E=euler(f,a,b,ya,M)   % Considere una función z = f(t,y) continua en [t0,t1]x[c,d]   % Y sea al ecuación diferencial: y' = f(t,y), con y(t0)= y0  % Datos % f es la función en forma de caracteres 'f'  % a y b son los extremos del intervalo de definición  % ya es la condición 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 Lic. Mat. Amado Malca Villalobos Ejecución 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 >>

SOLUCION DE UNA ECUACION DIFERENCIAL Metodo de Heun

Construcción de las aproximaciones a la solución del problema inicial:  y ' = f (t , y) con  y (a)= y0   continua en [a, b]´ [c, d ]  dadas por

 yk + 1 = yk +

Programa:

hé ù, k = 0,1, ...., M  - 1.   êf (tk , yk )+ f (tk + 1 , yk + h * f (tk , yk ))û ú  ë 2

heun.m

function E=heun(f,a,b,ya,M)   % Considere una función z = f(t,y) continua en [t0,t1]x[c,d]   % Y sea al ecuación 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 Lic. Mat. Amado Malca Villalobos 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  

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 Método de Taylor de orden 4

Construcción de las aproximaciones a la solución 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/jgomez http://mimosa.pnt ic.mec.es/jgomez53/matema/conocer 53/matema/conocer/fractales.htm /fractales.htm

Un problema similar tiene lugar en la ecología, y la predicción de las poblaciones biológicas. La ecuación sería simple si la población sólo creciera de forma indefinida, pero los efectos de los  predadores y un suministro de alimento limitado hacen esta ecuación ec uación incorrecta. La ecuación más simple si mple que tiene esto en cuenta es la siguiente: Población del año siguiente = r * población de este año * (1  –  población de este año) En esta ecuación, la población es un número entre 0 y 1, donde 1 representa el máximo de población  posible y el 0 la extinción. R es la tasa de crecimiento. La pregunta era, ¿Cómo afectan estos parámetros a la ecuación?. La respuesta obvia es que una mayor tasa de crecimiento implica que un aumento en la  población, mientras una menorpero tasano cr ecimiento crecimiento decrementará el número. Esta tendencia es cierta  para algunas tasas deque crecimiento, nde o para todas ellas.

13

 

10. METODOS NUMERICOS CON MatLab Lic. Mat. Amado Malca Villalobos Un biólogo, Robert May, decidió ver qué sucedía con las ecuaciones cuando cambiaba el valor de la tasa de crecimiento. A valores bajos de tasa de crecimiento, la población se establecería en un único número. Por ejemplo, si la tasa de crecimiento es 2,7, la población se establecerá en 0,6292. Cuando se incrementa la tasa de crecimiento, la población final se incrementaría también. Entonces, sucedió algo extraño. Tan pronto como la tasa de crecimiento pasaba de 3, la línea se rompía en dos. En lugar de establecerse en una única población, saltaría entre dos poblaciones distintas. Tendría un valor para un año, otro para el siguiente, repitiendo el ciclo para siempre. Incrementar la tasa de crecimiento un poco más provocó que saltara entre cuatro valores distintos. Cuando el parámetro crecía aún más, la línea se  bifurcaba de nuevo. Las bifurcaciones bifur caciones llegaban más y más rápidamente hast hastaa que de pronto, aparecía el caos. Pasada una cierta tasa de crecimiento, se hacía imposible predecir el comportamiento de la ecuación. Sin embargo, bajo una inspección más detallada, es posible ver líneas claras. Mirando más de cerca, estas líneas revelan pequeñas ventanas de orden, donde la ecuación va a través de las  bifurcaciones de nuevo antes de d e volver al caos. Esta auto-similitud, el hecho de que el gráf gráfico ico tenga una copia exacta de sí mismo oculta en su interior, viene a ser un aspecto importante del caos.

Figura 3: El diagrama de bifurcación para la ecuación de poblaciones. (James Gleick, Caos  –  Creando una Nueva Ciencia, página 71) La ecuación Logistica  x = ax(1- x), ) , a > 0 es una ecuación de punto fijo que modela una población,

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

14

 

10. METODOS NUMERICOS CON MatLab Lic. Mat. Amado Malca Villalobos 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,'-' plot(X,Y, '-', ,'markersize' 'markersize',1) ,1)  axis([p,q,r,s])  

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

0.5

1

1.5

2

2.5

3

3.5

4

15

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF