Alters

Remote Tools: Teoría de programación (I) - Arreglos en COBOL

Buenas!

Se acaban mis vacaciones, pero quedo con la buena sensación de haber descansado y poner ciertas cosas en su sitio...

Los dos próximos meses serán un no parar, así que es posible que esté más ausente que nunca (sobretodo en julio). Es posible que algunos meses también esté "a half" por temas personales.

Pero bueno, uno hace lo que puede, ¿no? y mientras encuentre una hora libre al día podré dedicarme a escribir y plasmar mis conocimientos, que es a lo que venimos aquí :-)

Y bien, en esta entrada nos metemos en la segunda parte de Remote Tools, la herramienta para smartphone que iré desarrollando como método de aprendizaje y como entretenimiento...

Esta parte, al igual que el segundo tema de matemáticas, constará de cinco partes. Vamos a ver el índice y cómo lo estructuraremos.


Mundo exterior - Matemáticas: Tema II (Tabla de derivadas)

Buenas!

Dejo, como anexo, una serie de derivadas que podéis usar cuando os sirvan (nunca está de más...)


Mundo exterior - Matemáticas: Tema II (fuciones de varias variables - ejemplos generales)

Buenas!

Ha sido tiempo sin escribir (creo)... como siempre, ando de culo!

En fin, se acerca el final de este segundo tema, con lo que se acerca también el inicio de la siguiente fase de la aplicación Remote Tools.

En esta entrada veremos varios ejemplos, que servirán para afianzar y repasar conceptos vistos con anterioridad.


Mundo exterior - Matemáticas: Tema II (derivadas segundas)

Buenas!

Llevaba algún tiempo sin escribir... y es que vuelvo a andar liado y hasta arriba!

La parte positiva es que me siento inusualmente activo... jejeje. Por otra parte, queda poco para acabar este tema matemático y volver a saco con COBOL.

En mis ratos libres hago mis pequeñas investigaciones con COBOL para adaptar los requerimientos de la app... también he tenido (recientemente) una revelación: ¿se podría, de alguna manera, tratar un sudoku como una matriz - o conjunto de ellas? en ello estoy, también.

En fin, dejémonos de divagaciones y vamos a las matemáticas.

Esta entrada tratará de segundas derivadas.

Definimos las derivadas segundas como una función lineal que transforma el espacio de R2 en R.

Podríamos aventurarnos a lanzar una primera ecuación correspondiente a una segunda derivada en una función de varias variables, a saber:

f(x,y) ≈ f(a,b) + fx(a,b)(x-a) + fy(a,b)(y-b) + ½ [fxx(a,b)(x-a)2 + 2fxy(a,b)(y-b) + fyy(a,b)(y-b)2]

f(x,y) ≈ f(a,b) + grad(f(a,b)) * R1 + ½ * R2 * H * R1

donde (por ejemplo) fxx es la derivada parcial de "x" sobre la derivada parcial de "x"; es decir, se aplican varias derivadas parciales sucesivas, tomando como variable la variable indicada.

Por otra parte, R1, R2, y H son matrices, tales que:

R1 = x-a
         y-b

R2 = (x-a   y-b)


H = fxx    fxy
       fyx   fyy

A "H" se le conoce como matriz Hessiana, y se suele denotar como "H(a,b)".

En el caso que nos atañe (funciones de dos variables), "H" es una matriz 2x2, y se dice que tiene dos valores propios (vaps): fxx y fyy (ya que fxy = fyx).

Veamos qué pasa con estos vaps:
  • si det(H) = 0: alguno de los vaps. es 0
  • si det(H) > 0: los dos vaps son mayores que 0, por tanto la función está por encima del plano "z"
    • si (a+b) > 0: H(a,b) es simétrica, cuadrada, y se puede diagonalizar.
  • si det(H) < 0: los dos vaps son menores que 0, por tanto la función está por debajo del plano "z"
    • si (a+b) > 0: H(a,b) es simétrica, cuadrada y se puede diagonalizar.
En caso que sea 0, no nos reporta ninguna información útil (al parecer).

Veamos qué son los vaps. de H:

vaps(H(a,b)) = l1, l2
l1 * l = det(H) = fxx*fyy-fxy2
l1 + l = fxx + fyy

veamos un ejemplo en el que se aplique todos estos conceptos:

f(x,y) = x2 + y/3 + xy2
Derivada segunda en el punto (7,2)
f(7,2) = 49 + 2/3 + 7*4 = 233/3
fx = 2x + y2 => en (7,2) = 18
fy = 1/3 + 2xy => en (7,2) = 85/3
fxx = 2
fxy = fyx = 2x
fyy = -2y

aplicamos fórmulas:

z = 233/3 + 18(x-7) + 85/3(y-2)

H(a,b) = 2    2y
            2y  2x

H(7,2) = 2   4
            4  14

det(H(7,2)) = 12
2 + 14 = 16
_____________
vaps > 0

Plano tangente:

Z = z + ½(2(x-7)2 + 2*4(x-7)(y-2) + 14(y-2)2)

Visto el ejemplo, pasemos a un inciso en las derivadas segundas: extremos relativos.

Para obtener los extremos relativos de una función de dos variables debe cumplirse lo siguiente:

fx = 0
fy = 0

Entonces, usando las fórmulas anteriores, obtendremos varios "juegos" de puntos. Basándose en los vaps de H(a,b), podemos saber qué tipo de extremo relativo estamos tratando:
  • si los dos vaps > 0: mínimo
  • si los dos vaps < 0: máximo
  • si un vap > 0 y otro vap < 0: intersección (hacia un eje es mínimo, hacia otro es máximo)
  • si algún vap = 0: no aporta información
Para obtener esto puntos, debemos ejecutar lo siguiente:

 - Obtenemos "fx" y "fy"
 - Obtenemos "fxx", "fxy", "fyy"
 - Igualamos "fx" y "fy" a 0, creando un sistema de ecuaciones
 - Resolvemos el sistema de ecuaciones
 - Para cada juego de soluciones, aplicamos H(a,b)

Y bien, con esto acabamos la cuarta entrega del segundo tema... las dos próximas serán cortas (ejemplos y utilidades).

Os dejo, y como siempre, ¡Hasta la próxima!




Mundo exterior - Matemáticas: Tema II (Curvas de nivel, gradientes, etc)

Buenas!

Volvemos de nuevo con las matemáticas. Esta entrada tratará sobre curvas de nivel, gradientes, derivadas de una función en un punto... vamos por partes:

Curvas de nivel:

Cuando hablamos de las curvas de nivel de una función de dos (o varias) variables, solemos hacerlo como "la curva de nivel con z=k" (donde k es un número entero).

Esta curva de nivel es una función lineal que transforma (en el caso de las funciones de dos variables) un espacio de R2 en un espacio de R.

¿Y en qué consiste? En hallar todos los puntos de f(x,y) en los que ésta valga "k"; dicho de manera resumida:

f(x,y) = k

Veamos, como siempre, un ejemplo:

f(x,y) = 4 – x2 – 2y2

Si queremos encontrar la curva de nivel de esta función con "k=0", tendríamos:


4 – x2 – 2y= 0;
x2 + 2y2 = 4

Y esto, como se puede ver, es una elipse con centro (0, 0) y radio sqrt(2)

Para la misma función, la curva de nivel con "k=2", sería:

4 – x2 – 2y= 2;
x2 + 2y2 = 2

Si hacemos varias curvas de nivel (k=0, k=1, k=2...), obtendríamos un conjunto de elipses concéntricas, con centro en (0, 0).

Es decir:

4 – x2 – 2y= k;
x2 + 2y2 = 4 - k;

Existe si 4 - k >= 0 (si k <= 0)

Obtenemos una elipse con centro (0, 0) y radio [(±sqrt(4 - k), 0), (0, ±sqrt((4 - k) / 2))]

Bien, ahora que ya sabemos cómo hacer curvas de nivel, es hora de pasar a las derivadas en un punto.

Derivadas de una función de varias variables en un punto

Definimos la derivada de una función de varias variables en un punto como el límite de un cociente incremental. 

Para resolver este tipo de derivadas, suele ser necesario el uso de derivadas parciales.

¿Qué es una derivada parcial? Es asumir una variable como tal, y el resto como constantes. Teniendo esta cláusula asumida, procedemos a hacer la derivada de la función como tal, aplicando más tarde (si lo hubiera) el conjunto de valores dados en la derivada.

Vamos a verlo mejor con un ejemplo:

Partimos de una función:

f(x,y) = x2y – 3x + e2y


Y queremos obtener la derivada de esta función en el punto (2, -3). Así, procedemos a hacer las derivadas parciales de "x" e "y".

df/dx = 2xy – 3 + 0
df/dy = x2 + 0 + 2e2y


Comprobamos como, mediante las reglas básicas de derivación podemos obtener estas expresiones.

Ahora no queda más que aplicar los valores dados en el enunciado, y obtenemos un vector (x, y) tal que:

f'(x, y) (2, -3) = (-15, 4,005)

A este vector se le llama "gradiente". Vamos a ello:

Gradientes:

Veamos algunas de sus propiedades:
  • La dirección y el sentido de derivada direccional máxima es cuando el vector (v1, v2) es el gradiente. Este pendiente máximo (derivada direccional) vale la longitud del gradiente (ya que cos = 1)
  • La dirección y el sentido de derivada direccional mínima es cuando el vector (v1, v2) es la inversa del gradiente (ya que cos = -1)
  • Si el vector (v1, v2) es perpendicular al gradiente de la función en (a, b), la derivada en el punto (a, b) de f(v1, v2) es 0.
Ahora, veamos qué pasa si los combinamos con las curvas de nivel:

Si las líneas de la curva de nivel de una función están juntas entre si, significa que, a poca variación de "x", hay mucha variación de "y", y, por tanto, el gradiente de f(x,y) es más grande.

Suponiendo que el punto (x, y) está cerca de (a, b):

f(x,y) ≈ f(a,b) + (x – a)*(df/dx) + (y – b)*(df/dy) ≈ f(a,b) + (x – a, y – b) * grad(f(a,b))

Y definimos el plano tangente "Z" como:

Z = f(a,b) + (x – a, y – b) * grad(f(a,b))
(a ≈ x, b ≈ y)

Si el plano "Z" es nulo ("Z" = 0), nos encontramos ante un punto de inflexión:

 - Máximo
 - Mínimo
 - Max/Min

La utilidad de esto lo veremos en la próxima entrada, dedicada íntegramente a derivadas dobles.

Así, el planning queda así:

 Parte IV: derivadas dobles
 Parte V: ejemplos
 Parte VI (anexo): utilidades y tabla de derivadas inmediatas

Como siempre, ¡Hasta la próxima!