You are on page 1of 11

TRABAJO FINAL

DIMA 4 01 JUAN ANTONIO GONZALEZ LOPEZ

Mtodo de Cuadratura de Gauss En anlisis numrico una cuadratura es una aproximacin de una integral definida de una funcin. Una cuadratura de Gauss n-puntos llamada as por Carl Friedrich Gauss. Es una cuadratura que selecciona los puntos de la evaluacin de manera ptima y no en una forma igualmente espaciada, construida para dar el resultado de una polinomio de grado 2n-1 o menos, elegibles para los puntos xi y los coeficientes wi para i=1,...,n. El dominio de tal cuadratura por regla es de [1, 1] dada por:

Tal cuadratura dar resultados precisos solo si f(x) es aproximado por un polinomio dentro del rango [1, 1]. Si la funcin puede ser escrita como f(x)=W(x)g(x), donde g(x) es un polinomio aproximado y W(x) es conocido.

Programa function y = gaussquadratura( f, a, b, TOL ) h2 = ( b - a ) / 2; fm = feval ( f, a + h2 - sqrt(1/3)*h2 ); fp = feval ( f, a + h2 + sqrt(1/3)*h2 ); sab = h2 * ( fm + fp ); [approx eest nfunc] = as ( sab, f, a, b, TOL ); if ( nargout == 0 ) s = sprintf ( '\t\t approximate value of integral: \t %.12f \n', approx ); s = sprintf ( '%s \t\t error estimate: \t\t\t\t\t %.4e \n', s, eest ); s = sprintf ( '%s \t\t number of function evaluations: \t %d \n', s, nfunc+2 ); disp ( s ) else y = approx; end; return function [app, est, nf] = as ( sab, f, a, b, TOL ) h2 = ( b - a ) / 4; fml = feval ( f, a + h2 - sqrt(1/3)*h2 ); fpl = feval ( f, a + h2 + sqrt(1/3)*h2 ); fmr = feval ( f, b - h2 - sqrt(1/3)*h2 );
METODOS NUMERICOS PROF: ESTEBAN ISIDRO PIOQUINTO Pgina 1

fpr = feval ( f, b - h2 + sqrt(1/3)*h2 ); sac = h2 * ( fml + fpl ); scb = h2 * ( fmr + fpr ); errest = abs ( sab - sac - scb );

if ( errest < (10.0*TOL) ) app = sac+scb; est = errest / 10.0; nf = 4; return; else [a1 e1 n1] = as ( sac, f, a, a+2*h2, TOL/2.0 ); [a2 e2 n2] = as ( scb, f, a+2*h2, b, TOL/2.0 ); app = a1 + a2; est = e1 + e2; nf = n1 + n2 + 4; return; end; Ejemplo en matlab >> a=2 %es el valor inferior de la integracion a= 2 >> b=3 % es el valor mayor de la integracion b= 3 >> TOL=0.1 % es la tolerancia del error de convergencia TOL = 0.1000 >> f=@(x)(1.44./x.^2)+0.24 % es el nombre de la integral f= @(x)(1.44./x.^2)+0.24 >> y = gaussquadrature2( f, a, b, TOL ) y=

0.4800

MTODO TRAPEZOIDAL La regla del trapecio o regla trapezoidal es la primera de las frmulas cerradas de Newton-Cotes. Corresponde al caso en donde el polinomio de aproximacin es de primer orden.

En donde f1(x) corresponde a una lnea recta que se representa como:

El rea bajo la lnea recta es una aproximacin de la integral de f(x) entre los lmites a y b:

El resultado de la integracin es:

Programa function y = trapezio(valor min,valor max, interv,fun ) y = 0; step = (valor max - valor min) / interv; for j = valor min : step : valor max y = y + feval(fun,j); end; y = (y - (feval(fun, valor min) + feval(fun, valor max))/2) * step;

Programa de la funcin

function y = fun_for_integration(x) y = x^3; ejemplo en matlab >> z1 = trapezio(0, 2, 10, 'fun_for_integration') z1 = 4.0400 >> z2 = trapezio(0, 3, 65, 'fun_for_integration') z2 = 20.2548 Mtodo de Simpson En anlisis numrico, la regla o mtodo de Simpson (nombrada as en honor de Thomas Simpson) y a veces llamada regla de Kepler es un mtodo de integracin numrica que se utiliza para obtener la aproximacin de la integral:

. Derivacin de la regla de Simpson Consideramos el polinomio interpolante de orden dos P2(x), que aproxima a la funcin integrando f(x) entre los nodos x0 = a, x1 = b y m = (a+b)/2. La expresin de ese polinomio interpolante, expresado a travs de la Interpolacin polinmica de Lagrange es:

As, la integral buscada se puede aproximar como:

Programa function Int = Simpson(x,y) foo = 1:length(x); fin = length(x); h = (x(fin)-x(1))/(fin-1); odd = find(rem(foo,2)~=0);

even = find(rem(foo,2)==0); IntOdd = 2*y(odd); IntEven = 4*y(even); if rem(foo(fin),2)~=0 Int = (h/3)*(sum(IntOdd) + sum(IntEven)-y(1)-y(fin)); else Int = (h/3)*(sum(IntOdd) + sum(IntEven)-y(1)-3*y(fin)); end end Ejemplo en matlab >> x=1:5 x= 1 2 3 4 5

>> y=5:10 y= 5 6 7 8 9 10

>> Int = Simpson(x,y) Int = 28

Mtodo de Euler La frmula o relacin de Euler, atribuida a Leonhard Euler, establece que:

para todo nmero real x. Aqu, e es la base del logaritmo natural, i es la unidad imaginaria y senx y cosx son funciones trigonomtricas. bien:

siendo Z la variable compleja formada por : Z=a+ix.

Demostracin usando las Series de Taylor La frmula de Euler ilustrada en el plano complejo. Sabiendo que:

y as sucesivamente. Adems de esto, las funciones ex, cos(x) y sin(x) (asumiendo que x sea un nmero real) pueden ser expresadas utilizando sus series de Taylor alrededor de cero.

Programa function [t,y]=feuler(f,t0,b,y0,n) h=(b-t0)/n; t=zeros(1,n+1); y=zeros(1,n+1); index=[0:1:n]; t=t0+h*index; y=y0; for i=2:n+1 y(i)=y(i-1)+h*feval(f,t(i-1),y(i-1)); end Ejemplo en matlab >> f=@(y,t)5*y./(t+1)-y f= @(y,t)5*y./(t+1)-y >> [tvals,yvals]=feuler(f,0,4,1,20) tvals = Columns 1 through 9

0.2000

0.4000

0.6000

0.8000

1.0000

1.2000

1.4000

1.6000

Columns 10 through 18 1.8000 2.0000 2.2000 2.4000 2.6000 2.8000 3.0000 3.2000 3.4000

Columns 19 through 21 3.6000 yvals = Columns 1 through 9 1.0000 1.0000 1.0600 1.1742 1.3301 1.5135 1.7113 1.9139 2.1144 3.8000 4.0000

Columns 10 through 18 2.3081 2.4922 2.6649 2.8252 2.9726 3.1071 3.2289 3.3383 3.4359

Columns 19 through 21 3.5224 3.5984 3.6648

>> [t,y]=feuler(f,0,4,1,20); >> yy=(t+1).^5.*exp(-t); >> plot(t,y,'x',t,yy)


60

50

40

30

20

10

0.5

1.5

2.5

3.5

Metodo de Runge-Kutta 2 Orden

La versin de segundo orden de la ecuacin yi + 1 = yi + (xi,yi,h)h es yi + 1 = yi + (a1k1 + a2k2)h donde k1 = f(xi,yi) k2 = f(xi + pih,yi + q11k1h)

Los valores de a1, a2, p1 y q11 son evaluados al igualar el trmino de segundo orden de la ecuacin dada con la expansin de la serie de Taylor. Se desarrollan tres ecuaciones para evaluar cuatro constantes desconocidas. Las tres ecuaciones son: a1 + a2 = 1 a2p1 = 1 / 2 a2q11 = 1 / 2 Como se tienen tres ecuaciones con cuatro incgnitas se tiene que suponer el valor de una de ellas. Suponiendo que se especific un valor para a2, se puede resolver de manera simultnea el sistema de ecuaciones obtenido: a1 = 1 a2

Como se puede elegir un nmero infinito de valores para a2, hay un nmero infinito de mtodos Runge-Kutta de segundo orden. Cada versin podra dar exactamente los mismos resultados si la solucin de la EDO fuera cuadrtica, lineal o una constante. Programa function[y]= rungekutta2(h) t=10; y(1)=0; n=10/h; a=0.2; b=0.4; x=0:h:t; for i=2:n+1; k1=h*(a-b*y(i-1)); k2=h*(a-b*(y(i-1)+k1)); y(i)=y(i-1)+0.5*(k1+k2); end; plot(x,y,'o') hold on Ejemplo en Matlab

>> h=0.5 h= 0.5000 >> [y]= rungekutta2(h) y= Columns 1 through 9 0 0.0900 0.1638 0.2243 0.2739 0.3146 0.3480 0.3754 0.3978

Columns 10 through 18 0.4162 0.4313 0.4436 0.4538 0.4621 0.4689 0.4745 0.4791 0.4829

Columns 19 through 21 0.4860 0.4885 0.4906


0.5 0.45 0.4 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0

10

El mtodo de Runge-Kutta de cuarto orden Un miembro de la familia de los mtodos Runge-Kutta es usado tan comnmente que a menudo es referenciado como RK4 o como el mtodo Runge-Kutta. Definamos un problema de valor inicial como:

Entonces el mtodo RK4 para este problema est dado por la siguiente ecuacin:

Donde

As, el siguiente valor (yn+1) es determinado por el presente valor (yn) mas el producto del tamao del intervalo (h) por una pendiente estimada. La pendiente es un promedio ponderado de pendientes: k1 es la pendiente al principio del intervalo; k2 es la pendiente en el punto medio del intervalo, usando k1 para determinar el valor de y en el punto usando el mtodo de Euler

k3 es otra vez la pendiente del punto medio, pero ahora usando k2 para determinar el valor de y k4 es la pendiente al final del intervalo, con el valor de y determinado por k3 Promediando las cuatro pendientes, se le asigna mayor peso a las pendientes en el punto medio:

Esta forma del mtodo de Runge-Kutta, es un mtodo de cuarto orden lo cual significa que el error por paso es del orden de O(h5), mientras que el error total acumulado tiene el orden O(h4).

Programa function[y,z]=rungekutta4(h,t,y,z,r,a,b) n=r/h; x=0:h:t; for i=1:n; k1=h*(z(i)); l1=h*(-a*z(i)-b*y(i)); k2=h*(z(i)+l1/2); l2=h*(-a*(z(i)+l1)-b*(y(i)+k1/2)); k3=h*(z(i)+l2/2); l3=h*(-a*(z(i)+l2)-b*(y(i)+k2/2));

k4=h*(z(i)+l3/2); l4=h*(-a*(z(i)+l3)-b*(y(i)+k3/2)); y(i+1)=y(i)+((1/6)*(k1+(2*k2)+(2*k3)+k4)); z(i+1)=z(i)+((1/6)*(l1+(2*l2)+(2*l3)+l4)); end; hold on plot(x,y,'-') plot(x,z,'r-') Ejemplo en Matlab
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8

10

15

20

25

30

35

40

45

50

You might also like