INTEGRALES ELÍPTICAS COMPLETAS Dado un parámetro m ∈ [0,1]
INTEGRALES ELÍPTICAS COMPLETAS Dado un parámetro m ∈ [0,1]
INTEGRALES ELÍPTICAS COMPLETAS Dado un parámetro m ∈ [0,1]
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
PRÁCTICA 3: <strong>INTEGRALES</strong> <strong>ELÍPTICAS</strong> <strong>COMPLETAS</strong><br />
TÉRMINO DE ENTREGA: 2008/10/16<br />
<strong>Dado</strong> <strong>un</strong> <strong>parámetro</strong> m <strong>∈</strong> [0, 1], las integrales<br />
1<br />
K(m) =<br />
0<br />
dt<br />
(1 − t 2 )(1 − mt 2 ) , E(m) =<br />
<br />
1 1 − mt2 dt<br />
1 − t2 se denominan integrales elípticas completas de primera y seg<strong>un</strong>da especie, respectivamente.<br />
Para calcularlas se suele usar el método de la media aritmética geométrica (AGM).<br />
Empezamos explicando que la AGM de <strong>un</strong>a tripleta de números positivos (a0, g0, s0) se<br />
calcula generando <strong>un</strong>a sucesión de tripletas similares mediante las fórmulas de recurrencia:<br />
an = (an−1 + gn−1)/2 es la media aritmética de an−1 y gn−1,<br />
gn = √ an−1gn−1 es la media geométrica de an−1 y gn−1,<br />
sn = (an−1 − gn−1)/2 es la semidiferencia de an−1 y gn−1,<br />
para toda n ≥ 1. <strong>Dado</strong>s dos números positivos arbitrarios, su media geométrica siempre es<br />
menor o igual que su media arimética. Por tanto, gn ≤ an y sn ≥ 0 para toda n ≥ 1. Además,<br />
la sucesión (an)n≥1 es decreciente, la sucesión (gn)n≥1 es creciente y, finalmente, existe <strong>un</strong><br />
único número real α tal que<br />
lím<br />
n→+∞ an = α = lím<br />
n→+∞ gn.<br />
Diremos que α es la media aritmética geométrica de los números a0 y g0.<br />
A nivel práctico <strong>un</strong> algoritmo infinito es imposible. Por tanto, paramos cuando aN ≈ gN<br />
según <strong>un</strong>a precisión fijada previamente mediante <strong>un</strong>a tolerancia positiva tol. Así pues, el<br />
criterio de parada de este proceso infinito es que sN sea menor que la tolerancia tol.<br />
Por ejemplo, si a0 = 1, g0 = 1/9, s0 = 80/81 y tol= 10−6 , entonces<br />
n an gn sn<br />
0 1,000000000000000 0,111111111111111 0,993807989999906<br />
1 0,555555555555556 0,333333333333333 0,444444444444444<br />
2 0,444444444444444 0,430331482911935 0,111111111111111<br />
3 0,437387963678190 0,437331038058985 0,007056480766255<br />
4 0,437359500868587 0,437359499942425 0,000028462809603<br />
5 0,437359500405506 0,437359500405506 0,000000000463081<br />
y paramos el proceso en el quinto paso: N = 5.<br />
Una vez sabemos calcular AGMs, el algoritmo para calcular las integrales elípticas es:<br />
1. Inicializar: a0 = 1, g0 = √ 1 − m y s0 = √ m.<br />
2. Iterar: Calcular (an, gn, sn) para n = 1, . . . , N.<br />
3. Finalizar: K(m) ≈ π<br />
2aN<br />
y S(m) :=<br />
K(m) − E(m)<br />
K(m)<br />
0<br />
≈ 1<br />
2<br />
N<br />
n=0<br />
2 n s 2 n .<br />
Por tanto, retomando el ejemplo anterior, vemos que si m = 80/81 entonces<br />
K ≈ π/2a5 = 3,5915449997965 . . . ,<br />
S ≈ (s 2 0 + 2s 2 1 + 4s 2 2 + 8s 2 3 + 16s 2 4 + 32s 2 5)/2 = 0,7162485648803 . . . ,<br />
E = (1 − S)K ≈ 1,01910604798917 . . . .<br />
Queremos calcular el valor aproximado de las integrales elípticas completas K = K(m) y<br />
E = E(m) para cualquier <strong>parámetro</strong> m <strong>∈</strong> [0, 1] dado, con <strong>un</strong>a precisión fijada mediante <strong>un</strong>a<br />
tolerancia positiva tol.
Nombre del fichero: integralesKE.m<br />
Cabecera: f<strong>un</strong>ction [K,E]=integralesKE(m,tol)<br />
INPUT: m = <strong>parámetro</strong>, tol = tolerancia (valor por defecto 10 −10 ).<br />
OUTPUT: K = integral completa elíptica de primera especie, E = integral completa<br />
elíptica de seg<strong>un</strong>da especie. Además, queremos que E sea de cálculo opcional. Es decir,<br />
si efectuamos la llamada K = integralesKE(m, tol), se debe calcular tan sólo la integral<br />
de primera especie K.<br />
Control de errores: Si el <strong>parámetro</strong> m no está entre cero y <strong>un</strong>o, se debe:<br />
1. Mostrar <strong>un</strong> mensaje de error por pantalla,<br />
2. Asignar el valor NaN (Not a Number) a cada argumento de salida, y<br />
3. Cortar el programa.<br />
Si el <strong>parámetro</strong> es igual a <strong>un</strong>o: m = 1, la integral K(m) es divergente (vale más<br />
infinito) y la integral E(m) vale <strong>un</strong>o. En ese caso, se debe:<br />
1. Asignar el valor Inf a K,<br />
2. Asignar el valor <strong>un</strong>o a E, y<br />
3. Cortar el programa.<br />
Si el número de pasos para calcular la AGM es mayor que diez: N > 10, se debe:<br />
1. Mostrar <strong>un</strong> mensaje de error por pantalla,<br />
2. Asignar el valor NaN (Not a Number) a cada argumento de salida, y<br />
3. Cortar el programa.<br />
Instrucciones particulares: Las siguientes instrucciones pueden ser útiles, a<strong>un</strong>que no<br />
todas ellas son imprescindibles.<br />
Los comandos nargin y nargout sirven para saber con cuantos argumentos de<br />
entrada y salida ha sido llamada <strong>un</strong>a f<strong>un</strong>ción, ver la subseccion 6.3.2 del manual 1 .<br />
El comando return corta la ejecución de cualquier f<strong>un</strong>ción, ver la subsección del<br />
6.3.3 manual. (No conf<strong>un</strong>dir con el comando break.)<br />
El comando disp sirve para escribir mensajes de texto por pantalla, ver la subsección<br />
6.2.2 del manual.<br />
El comando [] sirve para crear vectores vacíos sin tener que decir que tamaño<br />
tienen, ver la subsección 3.5.5 del manual.<br />
Comprobación: La f<strong>un</strong>ción E(m) es estrictamente decreciente, E(0) = π/2 y E(1) = 1.<br />
La f<strong>un</strong>ción K(m) es estrictamente creciente, K(0) = π/2 y lím m→1 − K(m) = +∞. El<br />
comando propio de MATLAB [K,E]=ellipke(m,tol) calcula las mismas integrales,<br />
con el mismo método y con las mismas convenciones sintácticas sobre los argumentos<br />
de entrada y salida.<br />
1 El manual “Aprenda MATLAB 6.1 como si estuviera en primero” que os podeis descargar de la página<br />
web de la asignatura. También podeis obtener información sobre <strong>un</strong> comando tecleando help comando en <strong>un</strong>a<br />
sesión interactiva de MATLAB