10 Metodos Numericos
April 12, 2023 | Author: Anonymous | Category: N/A
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