Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
% 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)
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 -
x Resolviendo: e + x = 0
f (x)= ex + x
f '(x)= ex + 1
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;
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
>> [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
100
1.2 1 0.8
50
0.6 0.4
-50
0.2
-100 -100
-80
-60
20
0 -2
-1.8
-1.6
-1.4
-1.2
-1
-0.8
-0.6
-0.4
-0.2
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]
err=b-a;iter=iter+1; % contador de iteraciones end sol=c; % solucion de salida if err>tol; disp('Insuficientes iteraciones') end
>> [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)
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
>> [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 >>
>> numcombin(30,6) ans = 593775 >> numcombin(3,12) Ingrese numeros adecuados >>
>> 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
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
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
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
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 >>
10
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 >>
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:
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
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
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
0.5
1.5
2.5
3.5
15