Académique Documents
Professionnel Documents
Culture Documents
Departamento de Matemtica
Laboratorio de Computacin para las Aplicaciones de la Matemtica en Ingeniera
18 de junio de 2017
1
Departamento de Matemticas U.T.F.S.M Anlisis Numrico Mat-270
ndice
1. Integracin Gaussiana 3
1.1. Frmula de Gauss - Legendre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2. Frmula de Gauss Chebyshev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3. Frmula de Gauss Hermite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4. Frmula de Gauss Laguerre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1. Integracin Gaussiana
donde los xi son los ceros del polinomio de Legendre Pn (x) en [-1,1] y,
2 2(1 x2i )
wi = = (1.1.2)
(1 x2i )[Pn0 (xi )]2 (n + 1)2 [Pn+1 (xi )]2
En la Sesin 6 se program una funcin que entrega el polinomio de Legendre de grado m escrito como
texto y un vector con los coecientes del mismo. Utilicmosla para crear una funcin que entregue los pesos
wi y los ceros xi segn Gauss - Legendre.
Se debe llevar I a la forma dada en (1.1.1). Esto se logra mediante el cambio de variables:
ba b+a
x = t+
2 2
ba
dx = dt
2
Por lo tanto:
1
ba ba
Z
b+a
I = f t+ dt
1 2 2 2
n
X ba ba b+a
wi f ti +
i=1
2 2 2
n
X
= ui f (ui ) (1.1.3)
i=1
Donde:
ba
ui = wi
2
ba b+a
ui = ti + (1.1.4)
2 2
La ltima igualdad dada en (1.1.3) tiene la forma del segundo miembro de (1.1.1), esto implica que, para
calcular I, pueden calcularse los ti como ceros del polinomio.
Pn (t) en [-1,1] para el n que se desee, calcular los wi correspondientes y convertirlos al intervalo [a,b] mediante
(1.1.4). Finalmente, se calcula la aproximacin de la integral mediante (1.1.3).
La siguiente funcin calcula los polinomios ortogonales de Legendre sin variables simblicas. A partir de l
se obtendrn las frmulas de cuadratura gaussiana.
function [pol,coef]=legendre_pol(m)
if m<=1,
if m==0,
pol = '1';
coef = 1;
elseif m==1,
pol = 'x';
coef = [1 0];
else
pol = '';
coef = 0;
end
else
p(1,:)=[zeros(1,m) 1];
p(2,:)=[zeros(1,m-1) 1 0];
if p(m,m+1)~=0,
if p(m,m+1) > 0 ,
pol = strcat(pol,' + ');
else
pol = strcat(pol,' - ');
end
pol = strcat(pol,num2str(abs(p(m+1,m))),'*x');
end
if p(m+1,m+1)~=0,
if p(m+1,m+1) > 0 ,
pol = strcat(pol,' + ');
else
pol = strcat(pol,' - ');
end
pol = strcat(pol,num2str(abs(p(m+1,m+1))));
end
coef = p(m+1,:);
end
Utilizando lo anterior, la funcin que calcula los pesos wi y los ceros xi segn Gauss - Legendre es:
function [x,w] = quadgl(n,a,b)
Ejemplo
2
Aproximar la integral de cos(x
)
1x2
en [-1,1] utilizandola frmula de Gauss-Legendre. Primero calculemos los
pesos y nodos de la frmula de diez puntos en el intervalo [-1,1]:
a=-1;
b=1;
n=10;
[x,w] = quadgl(n,a,b);
[x' w']
Ejemplo
R 1,5 2
Aproximar 1 ex dx utilizando la frmula de Gauss-Chebyshev. Para sta funcin la formula de Gauss-
Legendre funciono muy bien.
Con diez nodos se obtienen a lo ms 3 decimales. No es un resultado que se compare con el obtenido
mediante Gauss-Legendre.
Ejemplo
R1 2
Aproximar 1 cos(x
1x2
)
utilizandola formula de Gauss-Chebyshev. Para esta funcin la formula de Gauss-
Legendre funciono muy mal. No es necesario cambiar variables.
warning off
f=inline('cos(x.^2)./sqrt(1-x.^2)');
figure(1);
clf;
fplot(f,[-1 1]);
grid on
Tampoco es necesario introducir la ponderacion de Chebyshev. Denamos la funcion que esta en el
numerador:
g=inline('cos(x.^2)')
Apliquemos la formula de Gauss-Chebyshev de 6 puntos
n=6;
k=1:n;
x=cos((2*k-1)*pi/(2*n));
I=(pi/n)*sum(g(x))
Comparemos con la integral que se obtiene mediante el comando
quadl(f,-1,1)
Muy buena precision obteniendose 10 decimales signicativos.
Donde E es el error de integracin, los xi son los ceros del polinomio de Hermite de orden n :
2 dn x2
Hn (x) = (1)n ex (e ) (1.3.2)
dxn
y los coecientes son:
2n+1 n!
Ai = (1.3.3)
(Hn0 (xi ))2
Ejemplo
R 2
Aproximar la integral ex sin(x2 )dx utilizando 15 puntos.
Graquemos la funcin a integrar
clear
syms x
f=exp(-x^2)*sin(x^2);
ezplot(f,[-4 4])
grid on
H15=simplify((-1)^15*exp(x^2)*diff(exp(-x^2),15))
h=solve(H15)
Calculemos los coecientes correspondientes:
der=diff(H15);
for i=1:15
x=h(i,1);
A(i,1)=sqrt(pi)*factorial(15)*2^(16)/(eval(der))^2;
end
A
R
Aproximacin de la integral: ex2 dx
x=h;
g=sin(x.^2);
sum(A.*eval(g))
Comparemos con el valor que da el comando
double(int(f,-inf,inf))
Conclusin: Se obtienen 4 D.S. con esos 15 puntos.
(n!)2
en que los nodos xi son los ceros del polinomio de Laguerre Ln , y en que Ai = xi n2 (Ln (xi ))2 , En =
2
(n!)
(2n)! f
(2n)
() , donde los polinomios estn denidos recursivamente por:
L0 = 1
L1 = 1x
2n + 1 x n
Ln+1 (x) = Ln (x) Ln1 (x), para n 1
n+1 n+1
Del error se puede deducir que la frmula es exacta para todo polinomio de grado menor o igual a 2n 1 .
clear
syms x
L(1,1)=sym(1);
L(2,1)=1-x;
for i=1:14
L(i+2,1)=simplify((2*i+1-x)/(i+1)*L(i+1,1)-i/(i+1)*L(i,1));
end
disp('Listo')
Los nodos de Ln los pondremos en sus correspondientes arreglos nod_Ln
for i=1:16
eval(['nod_L' num2str(i) '=solve(L(' num2str(i) ',1));'])
if(i==16)
eval(['disp(nod_L' num2str(i) ')'])
end
end
Los pesos o ponderaciones para n nodos los pondremos en una lista: pon_Ln
for i=1:16
pol=char(diff(L(i,1)));
pol1=strrep(pol,'^','.^');
x=solve(L(i,1));
y=eval(pol1);
eval(['pon_L' num2str(i) '=1./(x.*y.^2);'])
if(i==16)
eval(['disp(pon_L' num2str(i) ')'])
end
end
Puede vericar la validez comparando algn resultado con lo presentado en alguna tabla.
Ejemplo
Hagamos el ejemplo bsico para el caso polinomial. Con n=4 la frmula de Gauss-Laguerre es exacta para
polinomios hasta de grado 2n 1 = 7.
Consideremos la siguiente funcin a la cual se le aplican 4 nodos:
syms x
f=1/(x+1)
p=x*(x+ x*(x+x*(x^2+f)))
expand(p)
Considerando el trmino no polinomial y su octava derivada:
h=x^3/(x+1);
deriv=simplify(diff(h,8))
ezplot(abs(deriv),[0 1])
grid on
Considerando 4 nodos se tiene:
n=4;
error=(factorial(n))^2/(factorial(2*n)*3628800)
double(int(exp(-x)*p,0,inf))
Usemos la frmula de Gauss-Laguerre con cuatro nodos:
p1=char(p);
p2=strrep(p1,'^','.^');
p3=strrep(p2,'/','./');
p4=strrep(p3,'*','.*');
x=real(double(nod_L4));
y=real(double(pon_L4));
sum(eval(p4).*y)
Perfecto!
Ejercicio
NOTA: observar que mediante la aplicacin de este mtodo, la resolucin de la ecuacin diferencial an-
terior se reduce al clculo de valores de una sucesin, iniciada por el valor denido "y(x0 )"
Ejemplos
f=@(t,y) y-t.^2+t-1.25;
a=0;
b=2;
Ahora denamos el paso (para este caso usaremos 0.1) y el valor inicial dado, dado que obtendremos una
sucesin de puntos, es conveniente utilizar un arreglo para "guardar"los valores de ", es decir y(1) = y0
2
h=0.1;
y(1)=1.25;
Con esto podemos aplicar fcilmente la frmula de Euler al problema dado utilizando la forma anterior y
un comando para realizar un loop, deniendo los valores de "t"previamente utilizando la informacin del
dominio y el paso.
t=a:h:b;
n=length(t);
for i=1:n-1
y(i+1)=y(i)+h*(f(t(i),y(i)));
end
As obtuvimos los valores de "para todo el recorrido "t"[0,2]. Ahora contrastemos la solucin obtenida
2
real=@(t)(t+0.5).^2-exp(t)+2
plot(t,real(t),'o',t,y,'r-')
clear y
y(1)=1.25;
h=0.05;
t=a:h:b;
n=length(t);
for i=1:n-1
y(i+1)=y(i)+h*(f(t(i),y(i)));
end
plot(t,real(t),'o',t,y,'r-')
2) Problema bidimensional
fy=@(y,z) -0.7*y+0.5*z;
fz=@(y,z) 0.2*y-0.5*z;
Ahora realizamos una operacin anloga al ejercicio anterior para pasos h= 0.1, 0.05 y 0.01 , para un
dominio t entre 0 y 2.
a=0;
b=2;
h=[0.1 0.05 0.01];
j=1;
y1(1)=0;
z1(1)=2;
t1=a:h(j):b;
n=length(t1);
for i=1:n-1
y1(i+1)=y1(i)+h(j)*(fy(y1(i),z1(i)));
z1(i+1)=z1(i)+h(j)*(fz(y1(i),z1(i)));
end
j=2;
y2(1)=0;
z2(1)=2;
t2=a:h(j):b;
n=length(t2);
for i=1:n-1
y2(i+1)=y2(i)+h(j)*(fy(y2(i),z2(i)));
z2(i+1)=z2(i)+h(j)*(fz(y2(i),z2(i)));
end
j=3;
y3(1)=0;
z3(1)=2;
t3=a:h(j):b;
n=length(t3);
for i=1:n-1
y3(i+1)=y3(i)+h(j)*(fy(y3(i),z3(i)));
z3(i+1)=z3(i)+h(j)*(fz(y3(i),z3(i)));
end
plot(t1,y1,'r-',t2,y2,'g',t3,y3,'b --')
figure(2)
plot(t1,z1,'r-',t2,z2,'g',t3,z3,'b --')
En 3d:
plot3(t1,y1,z1,'r-',t2,y2,z2,'g',t3,y3,z3,'b--')
grid on
Se observa que la solucin tiende a curvarse para rodear el origen, acercndose y bordendolo lentamente,
como si este fuera una especie de "sumidero". Tericamente para los sistemas lineales, los valores caracte-
rsticos indican el comportamiento cuando "t"tiende a innito, usemos el comando .eig"para obtener los
vectores y valores propios.
La diagonal "Dontiene los valores propios, al ser ambos negativos se deduce que el origen es un sumidero
que atrae a las trayectorias, lo cual coincide con nuestra observacin.
Ejemplos
P.V.I. Unidimensional
y0 = y t2 + t 1,25 0<t<2
y(0) = 1,25
y = (t + 0,5)2 et + 2
El planteo comienza de la misma forma que en el mtodo de Euler presentado anteriormente, ya que lo nico
que vara es la forma de clculo de la "sucesin":
plot(t,real(t),'o',t,y,'r-')
Notar que el parecido es mucho mayor que al aplicar la formula de Euler sola. Intentar con pasos menores
y analizar la magnitud del error absoluto.
Considere una densidad de masa d(t) parametrizada en el intervalo t e [0,2] y denida parcialmente por la
tabla que se da mas abajo.
Calcule la masa correspondiente al intervalo de parmetros [ 0.8, 1.0] utilizando la regla de Simpson y paso
h= 0.05
Tabla {t , d(t) }
{0.6, 0.552637}, {0.65, 0.610592}, {0.7, 0.668736}, {0.75, 0.726684}, {0.8, 0.784053},
{0.85, 0.840455}, {0.9, 0.895504}, {0.95, 0.948813}, {1., 1.}, {1.05, 1.04869},
{1.1, 1.0945}, {1.15, 1.13709}, {1.2, 1.17608}, {1.25, 1.21114}, {1.3, 1.24194},
{1.35, 1.26815}, {1.4, 1.28949}
R: 0.178....
Para aproximar la densidad en el problema anterior se necesitara calcular algunos coecientes de Fourier en
[0,2]
Calcular parte del coeciente
R 0,6 de Fourier C2.
Concretamente calcular 0,4 d(t)(1 3t + 32 t2 )dt utilizando Gauss-Legendre en 4 nodos para lo cual dispone
de parte de la tabla de densidades dada mas abajo
Tabla { t, d(t) }
{{0.0138864, 0.00766437}, {0.0660019, 0.0392463}, {0.133998, 0.0868143}, {0.186114, 0.1278},
{0.213886, 0.151132}, {0.266002, 0.197507}, {0.333998, 0.262622}, {0.386114, 0.315615},
{0.413886, 0.344807}, {0.466002, 0.401125}, {0.533998, 0.477059}, {0.586114, 0.536625}}
Obs. 4 nodos y pesos de Legendre