Logo Studenta

Calculo-Vectorial-25

¡Este material tiene más páginas!

Vista previa del material en texto

Universidad Nacional Autónoma de México
Facultad de Estudios Superiores
Plantel Aragón
INGENIERIA INDUSTRIAL
CALCULO VECTORIAL
REPORTE DE PRACTICA 
GRUPO:8027
NOMBRE DEL PROFESOR: VELAZQUEZ VELAZQUEZ DAMASO
NOMBRE DEL ALUMNO: CORTES HERNANDEZ RICARDO 
FECHA DE ENTREGA: OCTUBRE DEL 2023
INTRODUCCIÓN
En el presente documento hablaremos acerca de distintos temas como lo es el tema de máquinas de vectores de soporte y algunas aplicaciones de clasificación o reconocimiento de patrones, también como lo es el tema de Dinámica Browniana en el cual podemos analizar la reproducción de las plantas, también hablaremos acerca de el tema de algoritmos de la dinámica molecular la cual nos permite describir la evolución en el tiempo de sistemas de partículas mediante simulaciones del movimiento de los ́átomos y moléculas. Y a su vez también hablaremos acerca de las aplicaciones del calculo vectorial y el cómo estos se relacionan día a día con problemas cotidianos.
DESARROLLO
(maquinas vectoriales)
La teoría de las Máquinas de Vectores de Soporte (SVM por su nombre en inglés Support Vector Machine) fue desarrollada por Vapnik basado en la idea de minimización del riesgo estructural (SRM). Algunas de las aplicaciones de clasificación o reconocimiento de patrones son: reconocimiento de firmas, reconocimiento de imágenes como rostros y categorización de textos y en este trabajo, clasificación del déficit habitacional. A diferencia de las Redes Neuronales Artificiales (RNA) que utilizan durante la fase de entrenamiento, el principio de Minimización del Riesgo Empírico (ERM), las MVS se basan en el principio de Minimización del Riesgo Estructural (SRM), la cual ha mostrado un mejor desempeño que el ERM, ya que las Máquinas de Vectores de Soporte minimizan un límite superior al riesgo esperado a diferencia del ERM que minimiza el error sobre los datos de entrenamiento (Vapnik, 2000). La MVS mapean los puntos de entrada a un espacio decaracterísticas de una dimensión mayor, para luego encontrar el hiperplano que los separe y maximice el margenentre las clases.
Pertenecen a la familia de clasificadores lineales puesto que inducen separadores lineales o hiperplanos en espacios de características de muy alta dimensionalidad (introducidos por funciones núcleo o kernel) con un sesgo inductivo muy particular (Carreras, Márquez y Romero, 2004). La formulación matemática de las Máquinas de Vectores Soporte varía dependiendo de la naturaleza de los datos; es decir, existe una formulación para los casos lineales y, por otro lado, una formulación para casos no lineales. Es importante tener claro que, de manera general para clasificación, las máquinas de vectores soporte buscan encontrar un hiperplano óptimo que separe las clases. Las MVS han sido desarrolladas como una técnica robusta para clasificación y regresión aplicado a grandes conjuntos de datos complejos con ruido; es decir, con variables inherentes al modelo que para otras técnicas aumentan la posibilidad de error en los resultados pues resultan difíciles de cuantificar y observar
Ejemplo I
En la siguiente figura, podemos decir que lo que esté a la izquierda de la línea, es azul y lo que esté a la derecha, es rojo. Sin embargo, el punto nuevo abajo a la izquierda es clasificado como azul. Intuitivamente, está mal clasificar este punto nuevo como azul.
Ejemplo II
La siguiente figura muestra otra forma equivocada de clasificar estos puntos. Podemos decir que cualquier punto que esté por lo alto de la línea será azul. Cualquiera que esté por debajo será rojo. Sin embargo, el nuevo punto a la derecha, ha sido «incorrectamente» clasificado como azul. Intuitivamente, diríamos que debería haber sido clasificado como rojo.
EJEMPLO III
En el caso de ejemplos no-separables, las variables de holgura miden la desviación desde el borde del margen de la clase respectiva. Así, los ejemplos xi , xj y xk son, cada uno de ellos, no- separables (ξi , ξj , ξk > 0. Sin embargo, xi está correctamente clasicado, mientras que xj y xk están en el lado incorrecto de la frontera de decisión y, por tanto, mal clasicados. está cometiendo el hiperplano de separación, es decir: f(w, ξ) = 1 2 kwk 2 + C Xn i=1 ξi (26) donde C es una constante, sucientemente grande, elegida por el usuario, que permite controlar en qué grado inuye el término del coste de ejemplos no-separables en la minimización de la norma, es decir, permitirá regular el compromiso entre el grado de sobreajuste del clasicador nal y la proporción del número de ejemplos no separables. Así, un valor de C muy grande permitiría valores de ξi muy pequeños. En el límite (C → ∞), estaríamos considerando el caso de ejemplos perfectamente separables (ξi → 0). Por contra, un valor de C muy pequeño permitiría valores de ξi muy grandes, es decir, estaríamos admitiendo un número muy elevado de ejemplos mal clasicados. En el caso límite (C → 0), se permitiría que todos los ejemplos estuvieran mal clasicados (ξi → ∞). En consecuencia, el nuevo problema de optimización consistirá en encontrar el hiperplano, denido por w y b, que minimiza el funcional (26) y sujeto a las restricciones dadas por (25), es decir m´ın 1 2 < w, w > +C Pn i=1 ξi s.a. yi (< w, xi > +b) + ξi − 1 ≥ 0 ξi ≥ 0, i = 1, . . . , n (27) El hiperplano así denido recibe el nombre de hiperplano de separación de margen blando (del inglés soft margen), en oposición al obtenido en el caso perfectamente separable, también conocido como hiperplano de separación de margen duro (del inglés hard margen). Como en el caso de la sección anterior, si el problema de optimización a ser resuelto corresponde a un espacio de características de muy alta dimensionalidad, entonces, para facilitar su resolución,
CODIGOS
puede ser transformado a su forma dual. El procedimiento para obtener el hiperplano de separación es similar al allí utilizado. Por tanto, aquí sólo se reproducirán de forma esquemática y secuencial los pasos necesarios para realizar dicha transformación. Paso 1:
 Obtención de la función Lagrangiana3 L(w, b, ξ, α, β) = 1 2 < w, w > +C Xn i=1 ξi − Xn i=1 αi [yi (< w, xi > +b) + ξi − 1] − Xn i=1 βiξi (28) Paso 2: Aplicación de las condiciones de KKT: ∂L ∂w ≡ w∗ − Xn i=1 αiyixi = 0 (29) ∂L ∂b ≡ Xn i=1 αiyi = 0 (30) ∂L ∂ξi ≡ C − αi − βi = 0 (31) αi [1 − yi (< w∗ , xi > +b ∗ ) − ξi ] = 0, i = 1, . . . , n (32) βi · ξi = 0, i = 1, . . . , n (33) Paso 3: Establecer las relaciones entre las variables del problema primal (w, b, ξ) con las del problema dual (α, β). Para ello, hacemos uso de la relacion (29): w∗ = Xn i=1 αiyixi (34) Paso 4: Establecer restricciones adicionales de las variables duales. Para ello se hace uso de las relaciones (30-31): Xn i=1 αiyi = 0 (35) C = αi + βi (36) Paso 5: Del resultado obtenido en el paso 3, eliminar las variables primales de la función Lagrangiana para obtener así el problema dual que queremos maximizar: L(α) = Xn i=1 αi − 1 2 Xn i,j=1 αiαjyiyj < xi , xj > Finalmente, se obtiene la formalización buscada del problema dual4 : m´ax Pn i=1 αi − 1 2 Pn i,j=1 αiαjyiyj < xi , xj > s.a. Pn i=1 αiyi = 0 0 ≤ αi ≤ C, i = 1, . . . , n (37) 3Obsérvese que, en este caso, aparecen dos familias de multiplicadores de Lagrange, αi ≥ 0 y βi ≥ 0, con i = 1, . . . , n, como consecuencia de las dos familias de restricciones que aparecen en (27). Nuevamente, el signo menos del tercer y cuarto sumando obedece a que las dos familias de restricciones en (27) están expresadas como restricciones del tipo g(x) ≥ 0 en lugar de g(x) ≤ 0 . 4La restricción de que αi ≤ C se obtiene de (36) y de las Como en el caso anterior, la solución del problema dual nos permitirá expresar el hiperplano de separación óptima en términos de α∗ . Para ello, bastará tener en cuenta dicha solución y sustituir la expresión (34) en (1), es decir: D(x) = Xn i=1 α ∗ i yi < x, xi > +b ∗ (38) Antes de obtener una expresión para el cálculo del valor de b ∗ , se considerarán algunos resul- tados interesantes. Así, de la restricción (36) es fácil deducir que si αi = 0,entonces C = βi . De este último resultado y de la restricción (33) se deduce que ξi = 0. Por tanto, se puede armar que todos los ejemplos xi cuyo αi asociado sea igual a cero corresponden a ejemplos separables (ξi = 0). Por otro lado, todo ejemplo no separable, xi , se caracteriza por tener asociado un ξi > 0 (ver g. 4). En este caso, y de la restricción (33), se deduce que βi = 0. A su vez, de este último resultado y la restricción (36), se deduce que αi = C. Por tanto, se puede armar que todos los ejemplos xi cuyo αi = C corresponderán a ejemplos no-separables (ξi > 0). Además, dado que, en este caso, αi 6= 0, de la restricción (32) se deduce que 1 − yi (< w∗ , xi > +b ∗ ) − ξi = 0 es decir 1 − yiD(xi) = ξi Aquí se pueden considerar dos casos (ver g. 4). En el primero, el ejemplo, xi , aunque no separable, está bien clasicado, es decir, yiD(xi) ≥ 0, entonces ξi = 1−|D(xi)|. En el segundo caso, el ejemplo, xi , es no separable y está mal clasicado, es decir, yiD(xi) < 0, entonces ξi = 1 + |D(xi)|. Finalmente, consideremos el caso 0 < αi < C. Así, en esta situación, la restricción (36) permite armar que βi 6= 0 y, de este resultado y la restricción (33), se deduce que ξi = 0. Igualmente, si 0 < αi < C, de la restricción (32) y del resultado obtenido anteriormente (ξi = 0), se deduce que 1 − yi (< w∗ , xi > +b ∗ ) = 0 Por tanto, se puede armar que un ejemplo, xi , es vector soporte si y solo si 0 < αi < C. De la expresión anterior, se esta en disposición de calcular el valor b ∗ , es decir b ∗ = yi− < w∗ , xi > ∀i t.q. 0 < αi < C (39) Obsérvese que, a diferencia del caso perfectamente separable, ahora, para el cálculo de b ∗ , no es suciente con elegir cualquier ejemplo xi que tenga asociado un αi > 0. Ahora, se habrá de elegir cualquier ejemplo xi que tenga asociado un αi que cumpla la restricción 0 < αi < C. Finalmente, haciendo uso de (34), es posible expresar b ∗ en términos de las variables duales: b ∗ = yi − Xn j=1 α ∗ i yi < xj , xi > ∀αi t.q. 0 < αi < C (40) donde los coecientes α ∗ i , i = 1, . . . , n, corresponden a la solución del problema dual. A modo de resumen, en el caso de ejemplos cuasi-separables, hay dos tipos de ejemplos para los que los α ∗ i 6= 0. Aquellos, para los que 0 < α∗ i < C, que corresponderían a vectores soporte normales y, aquellos para los que α ∗ i = C, asociados a ejemplos no separables. set.seed(68)
X1 <- rnorm(n = 10, mean = 2, sd = 1)
X2 <- rnorm(n = 10, mean = 2, sd = 1)
observaciones <- data.frame(X1 = c(X1, X1 + 2), X2 = c(X2, X2 + 2) ,
 clase = rep(c(1, -1), each = 10))
observaciones$clase <- as.factor(observaciones$clase)
 
ggplot() +
 geom_point(data = observaciones, aes(x = X1, y = X2, color = clase), size = 4) +
 geom_abline(intercept = 9, slope = -2) +
 geom_abline(intercept = 8.5, slope = -1.7) +
 geom_abline(intercept = 8, slope = -1.5) +
 geom_abline(intercept = 6.5, slope = -1) +
 geom_abline(intercept = 5.4, slope = -0.75) +
 theme_bw() +
 labs(title = "5 Posibles hiperplanos de separación") +
 theme( legend.position = "none",
 plot.title = element_text(hjust = 0.5, size = 11))
set.seed(101)
coordenadas <- matrix(rnorm(40), 20, 2)
colnames(coordenadas) <- c("X1","X2")
y <- c(rep(-1,10), rep(1,10))
y <- as.factor(y)
coordenadas[y == 1, ] <- coordenadas[y == 1, ] + 1
datos <- data.frame(coordenadas, y)
ggplot(data = datos, aes(x = X1, y = X2, color = as.factor(y))) +
 geom_point(size = 4) +
 theme_bw() +
 labs(title = "Clases no separables linealmente") +
 theme( legend.position = "none",
 plot.title = element_text(hjust = 0.5, size = 11)
Dinámica Browniana
Propuesta de un modelo de trayectoria estocástica.
Supongamos que denota la trayectoria de una partícula que está sometida a choques con moléculas (por ejemplo, dentro de un fluido); el desplazamiento de esta partícula, en un intervalo de tiempo de longitud se mide mediante , luego este desplazamiento, aparte de deberse a la velocidad de la partícula en ese momento, se agregará otro que puede ser proporcional a un desplazamiento, debido a interacciones azarosas, denotado por . Supongamos que y que la velocidad en el tiempo y en la posición , es , se tendrá entonces que
(1)
 siendo el factor de proporción que eventualmente puede depender del tiempo y la posición . Digamos que el desplazamiento se explica por una parte determinística, el primer término de la suma en el lado derecho de (1), y por una parte aleatoria, indicada por el segundo término del lado derecho de (1). De manera más general,
(2)
 Observemos que si obedece las leyes de alguna probabilidad, se tendrá que, en definitiva, , y por ende , será una variable aleatoria.
Ahora bien, si es una variable aleatoria, entonces una posible trayectoria, conforme a la ley de probabilidad que la rige, se denotará por , donde es el resultado obtenido del espacio de probabilidad en que se sustenta la variable . Salvo cuando sea absolutamente necesario la trayectoria de la denotaremos simplemente por .
El movimiento Browniano unidimensional y su modelación.
 Supongamos que es una colección de variables aleatorias, diremos que este proceso es un movimiento Browniano si tiene las siguientes propiedades:
 (i) para es una variable aleatoria normalmente distribuida con media 0 y varianza .
 (ii) para , es un conjunto de variables aleatorias independientes.
 Recordemos que una variable aleatoria se distribuye con media y varianza (que denotaremos por ) si la ley de probabilidad es
(3)
de manera que la propiedad (i) nos dice que para 
(4)
 y la propiedad (ii) nos dice que para se tiene que
 La aparente complejidad de estas propiedades matemáticas son realmente sencillas de interpretar (o modelar).
Sea , intentaremos crear una posible trayectoria para cada valor de , esto es . Supongamos que por hipótesis , ¿cómo se obtiene ?, para esto acudimos a la variable aleatoria , donde sabemos que un posible valor para este incremento sigue una distribución normal , luego generamos un valor aleatorio según esta distribución y así obtenemos un valor para . Para generar el valor de , acudimos al incremento (observemos que ya sabemos el valor de , digamos ) que es obtenido mediante la generación de un número aleatorio según una distribución , sea este número , esto es , de modo que , y así continuamos con el proceso. De modo que para generar una posible trayectoria de este movimiento Browniano, se generan en forma independientes (garantizado por la propiedad (ii)) los incrementos , y se calcula la trayectoria mediante
 sin olvidar que cada se ha obtenido de una distribución , cálculos que en general son más sencillo en cuanto es común establecer que la diferencia entre los tiempos () sea constante, esto es , de modo que se genera mediante una distribución .
 4. Aplicaciones del movimiento Browniano
4.1 Introducción a las Ecuaciones Diferenciales Estocásticas
En la sección 2 describíamos el movimiento de una partícula suspendida en un fluido, y que estaba influenciado por dos fuerzas. La primera, correspondía a un movimiento no aleatorio (determinístico) generado por la naturaleza subyacente del flujo del fluido o inducida por alguna fuerza externa impuesta sobre el sistema. La segunda, colisiones y/o relaciones de interacciones con otras partículas originan movimientos aleatorios que actúan en tiempos de corta duración, y que a menudo se describen correctamente por las fluctuaciones de un movimiento Browniano.. De manera que, para un periodo de tiempo desde hasta , el desplazamiento de la partícula se puede aproximar por
(5)
 donde es la localización de la partícula en el tiempo . Aquí es la velocidad instantánea del fluido en el tiempo y en la posición mientras que el cambio incremental asociado a un movimiento Browniano, , está representado por , y mide la varianza instantánea asociadas con las colisiones del proceso .
Ahora bien, la ecuación (5) se puede escribir en notación de diferenciales, esto es
(6)
 y esta es una ecuación diferencial estocástica. Si obviáramos la palabra"estocástica", que se debe a la diferencial , estaríamos tentado a integrar en el sentido clásico de Riemann-Stieltjes, para obtener alguna "solución" para , esto es
(7)
 sin embargo la segunda integral, que diremos integral estocástica, no puede recibir el tratamiento clásico, toda vez que el proceso Browniano no es de "variación acotada". Entonces la integral estocástica deberá tener un tratamiento especial. Existen dos versiones para el tratamiento de esta integral, digamos entonces que hay dos tipos de integrales estocásticas: la integral de Ito, y la integral de Stratonovich.
De momento nuestro interés será la identificación de algún fenómeno real que se pueda modelar según la ecuación.
Variación del precio de las acciones.
Si bien es cierto que la ecuación (6) se obtuvo teniendo en cuenta consideraciones de la Física, veremos como el precio de las acciones se comportan como partículas que sufren fluctuaciones aleatorias debidos a interacciones. De paso, entregaremos un ejemplo de como un proceso discreto se puede aproximar a un proceso de difusión (en espera de la definición formal de un proceso de difusión, digamos que el de la ecuación (6) es un proceso de difusión, en virtud de las buenas propiedades del movimiento Browniano ).
Sea el precio de una determinada acción observada al término del ésimo día. Es común definir el retorno del precio de esta acción como
(8)
 Observemos que este retorno corresponde al incremento del día ésimo (positivo o negativo) respecto del precio de la acción del día anterior (en tanto por 1). Vamos a presentar un modelo que se puede catalogar de ingenuo, pero sin lugar a dudas nos ayudará a clarificar conceptos del Cálculo Estocástico. Supongamos que la sucesión admite la siguiente estructura
(9)
 donde es el retorno esperado y las variables son independientes y se distribuyen según una normal ; de manera tal que las son independientes e identicamente distribuidas según . Reemplazando (8) en (9),
 donde son i.i.d. según , de manera que
(10)
 Observemos que esta ecuación en diferencias finitas actúa en el espacio de tiempo discreto . Extendamos nuestro espacio de tiempo a , y efectuemos una partición, siempre discreta, de manera de proponer un modelo levemente más general, y que en cualquier caso cuando la partición coincida con el conjunto nos resulte la ecuación (10). Para , hagamos
(11)
 donde es un movimiento Browniano.
Si la partición es tal que su desplazamiento es constante, esto es , entonces si la ecuación (11) es en esencia la ecuación (10). Se puede demostrar, mediante técnicas avanzadas del Cálculo Estocástico, que toda vez que esta partición sea más fina, es decir cuando , entonces el proceso definido por la ecuación (11) converge (en distribución) a un proceso de difusión , que satisface la ecuación diferencial estocástica
(12)
 Observemos que la ecuación (12) es una caso particular de la ecuación (6). De manera que para obtener una trayectoria de la evolución del precio de la acción, , significa resolver la integración estocástica de .
Algoritmos de dinámica molecular
DESARROLLO
aplicado al problema del plegamiento y la predicción de estructura de Llegados a este punto ya podemos estudiar los principales algoritmos que se han macromoléculas. Podemos clasificarlos por el nivel de detalle que utilizan. La escala va desde métodos que modelan cada uno de los átomos de las macromoléculas en cuestión y del solvente en que se encuentran, hasta métodos donde se manejan aminoácidos o incluso elementos de estructura secundaria como un todo indivisible y se ignora o modela de forma implícita el solvente.
La Dinámica Molecular permite describir la evolución en el tiempo de sistemas de partículas mediante simulaciones del movimiento de los ́átomos y moléculas. Una opción común para realizar simulaciones más eficientes es imponer restricciones, denominadas ligaduras, en la longitud de los en los ́ángulos entre enlaces. Esta técnica permite incrementar el paso temporal de las simulaciones y con ello lograr mayores tiempos simulados con lo que se incrementa el poder predictivo de la simulación. Uno de los algoritmos más extendidos para imponer ligaduras es SHAKE, pero presenta limitaciones puesto que está basado en aproximaciones y procesos iterativos, lo cual afecta negativamente a su exactitud, eficiencia y estabilidad numérica. Pre-sentamos la implementación en Gramas de un nuevo algoritmo, ILVESS, que, todavía en fase experimental, pretende mejorar la eficiencia y limitaciones del clásico SHAKE.
En contraste con los algoritmos de dinámica molecular, que no se pueden ejecutar en cualquier hardware, tenemos a nuestro alcance otros métodos más simples que no modelan necesariamente el proceso de plegamiento pero permiten obtener inferencias estructurales, a partir de la secuencia, de calidad suficiente para muchas aplicaciones biológicas. Al ser heurísticas, estas estrategias suelen tener un nicho de aplicación muy restringido, y su validación es normalmente empírica. A pesar de ello muchos de estos métodos han tenido y tienen un gran impacto y tienen la ventaja de que, en general, se pueden realizar en cualquier computador. Los siguientes capítulos del curso se centran en algunos de estos métodos.
Predicción de estructura secundaria por aprendizaje automático, normalmente por medio de redes neuronales 
La estructura secundaria es una propiedad de las proteínas naturales en solución, que se explica por medio de una red (dinámica) de puentes de hidrógeno que conectan diferentes partes del polipéptido a escala más o menos local, formando hélices y láminas que quedan conectadas por lazos ( loops ) y regiones desordenadas
Si disponemos de las coordenadas atómicas de una proteína podemos medir sus ángulos diedros para generar nuestros propios diagramas de Ramachandran
Comprobar qué residuos de la secuencia se encuentran en conformaciones (regiones) favorables, como medida de calidad de la estructura
veriguar en base a la geometría del esqueleto proteico el estado de estructura secundaria de segmentos de residuos
COORDENADAS
#!/usr/bin/perl -w
# prog2.2 calcula los angulos diedros de una proteina en formato PDB
# Bruno Contreras-Moreira, adaptado de http://praveenvijay.netfirms.com/scripts.htm#backbone
use strict;
use Math::Trig;
my ($PDBfile,@coordenadas,@atomo,@residuo,@cadena,@res_id,@x,@y,@z);
my ($total,$j,$i) = (0,1);
if(!$ARGV[0]){ die "# usage: $0 <PDB file>\n"; }
else{ $PDBfile = $ARGV[0] }
## 1) lee coordenadas atomicas en formato PDB
open(PDB,$PDBfile)|| die "# $0 : no puedo leer $PDBfile\n";
while(<PDB>)
{
	last if(/^ENDMDL/); # para estructuras NMR como 1lfu, TER es otra opcion
	next if not(/^ATOM/);
	push(@coordenadas,$_);
}
close(PDB);
## 2) recorre secuencia buscando atomos N,CA,C consecutivos
for $i (0..$#coordenadas-2)
{
	#ATOM 2231 N ALA P 78 -14.689 7.253 -23.476
	$residuo[$j] = substr($coordenadas[$i],17,3);
	$cadena[$j] = substr($coordenadas[$i],21,1);
	$res_id[$j] = substr($coordenadas[$i],23,3);
	$atomo[$j] = substr($coordenadas[$i],12,4);
	$atomo[$j+1] = substr($coordenadas[$i+1],12,4);
	$atomo[$j+2] = substr($coordenadas[$i+2],12,4); 
	if($atomo[$j] eq ' N ' && $atomo[$j+1] eq ' CA ' && $atomo[$j+2] eq ' C ')
	{
		$x[$j]{'N'} = substr($coordenadas[$i],30,8); 
		$y[$j]{'N'} = substr($coordenadas[$i],38,8); 
		$z[$j]{'N'} = substr($coordenadas[$i],46,8); 
 
		$x[$j]{'CA'} = substr($coordenadas[$i+1],30,8);
		$y[$j]{'CA'} = substr($coordenadas[$i+1],38,8);
		$z[$j]{'CA'} = substr($coordenadas[$i+1],46,8); 
		$x[$j]{'C'} = substr($coordenadas[$i+2],30,8); 
		$y[$j]{'C'} = substr($coordenadas[$i+2],38,8);
		$z[$j]{'C'} = substr($coordenadas[$i+2],46,8);
		$j++;
		$total++;
	}
}
print "# $0 : fichero PDB: $PDBfile ($total residuos)\n\n";
## 3) calcula e imprime angulos diedros
print "# residuo phi psi omega\n";
for $j (2..$total-1)
{ 
	my ($x1,$y1,$z1,$x2,$y2,$z2,$x3,$y3,$z3,$x4,$y4,$z4,$x5,$y5,$z5,$x6,$y6,$z6); # puntos
	my (@v1,@v2,@v3,@v4,@v5,@v6,@v7,@v8);# vectores directores
	my ($phi,$psi,$omega) = (-9999,-9999,-9999); # valores nulos por defecto
	# toma atomos en residuos j-1,j y j+1 para definir planos y calcular angulos diedros
	($x1,$y1,$z1) = ( $x[$j-1]{'C'} , $y[$j-1]{'C'} , $z[$j-1]{'C'} ); 
	($x2,$y2,$z2) = ( $x[$j]{'N'} , $y[$j]{'N'} , $z[$j]{'N'} ); # Cj-1 - Nj 
	($x3,$y3,$z3) = ( $x[$j]{'CA'} , $y[$j]{'CA'} , $z[$j]{'CA'} ); # \
	($x4,$y4,$z4) = ( $x[$j]{'C'} , $y[$j]{'C'} , $z[$j]{'C'} ); # CAj - Cj
	($x5,$y5,$z5) = ( $x[$j+1]{'N'} , $y[$j+1]{'N'} , $z[$j+1]{'N'} ); # \ 
	($x6,$y6,$z6) = ( $x[$j+1]{'CA'}, $y[$j+1]{'CA'}, $z[$j+1]{'CA'} );# Nj+1 - CAj+1
	@v1 = ( $x2-$x1 , $y2-$y1 , $z2-$z1 ); # plano definido por Cj-1, Nj and CAj (para medir phi)
	@v2 = ( $x3-$x1 , $y3-$y1 , $z3-$z1 );
	@v3 = ( $x3-$x2 , $y3-$y2 , $z3-$z2 ); # plano Nj, CAj and Cj (para medir phi y psi)
	@v4 = ( $x4-$x2 , $y4-$y2 , $z4-$z2 );
	
	@v5 = ( $x4-$x3 , $y4-$y3 , $z4-$z3 ); # plano CAj, Cj and Nj+1 (para medir psi)
	@v6 = ( $x5-$x3 , $y5-$y3 , $z5-$z3 );
	@v7 = ( $x5-$x4 , $y5-$y4 , $z5-$z4 ); # plano Cj, Nj+1 and CAj+1 (para medir psi y omega)
	@v8 = ( $x6-$x4 , $y6-$y4 , $z6-$z4 );
	$phi = angulo_diedro( @v1, @v2, @v3, @v4, $x3, $y3, $z3, $x2, $y2, $z2 ); # entre Nj y CAj (2Cs)
	$psi = angulo_diedro( @v3, @v4, @v5, @v6, $x4, $y4, $z4, $x3, $y3, $z3 ); # entre CAj y Cj (2Ns)
	$omega = angulo_diedro( @v5, @v6, @v7, @v8, $x5, $y5, $z5, $x4, $y4, $z4 );# entre Nj+1 y Cj (2CAs)
	printf("%4d %3s %s %8.1f %8.1f %8.1f\n",$res_id[$j],$residuo[$j],$cadena[$j],$phi,$psi,$omega);
}
print "# residuo phi psi omega\n";
sub angulo_diedro 
{
	my (@p) = @_; #parametros ( v_plano1,v_plano2, v_plano3, v_plano4, enlace1, enlace2 )
	
	my (@v1,@v2,$modulo1,$modulo2,$prod_escalar,@normal,$cos,$ang,$signo);
	## 1) determina el angulo entre ambos planos
	# calcula vector perpendicular a cada plano por producto vectorial
	@v1 = ( ($p[1]*$p[5])-($p[2]*$p[4]) , ($p[2]*$p[3])-($p[0]*$p[5]) , ($p[0]*$p[4])-($p[3]*$p[1]) );
	@v2 = ( ($p[7]*$p[11])-($p[8]*$p[10]) , ($p[8]*$p[9])-($p[6]*$p[11]) , ($p[6]*$p[10])-($p[9]*$p[7]) );
	# calcula producto escalar de vectores perpendiculares para estimar cos(angulo)
	$prod_escalar = ($v1[0]*$v2[0]+$v1[1]*$v2[1]+$v1[2]*$v2[2]);
	$modulo1 = ((($v1[0]*$v1[0])+($v1[1]*$v1[1])+($v1[2]*$v1[2]))**0.5);
	$modulo2 = ((($v2[0]*$v2[0])+($v2[1]*$v2[1])+($v2[2]*$v2[2]))**0.5);	
	$cos = ($prod_escalar/($modulo1*$modulo2));
	$ang = (Math::Trig::acos($cos))/(Math::Trig::pi/180);
	
	## 2) determina el signo del angulo diedro
	# calcula vector normal a ambos vectores perpendiculares por producto vectorial
	@normal = ( ($v1[1]*$v2[2])-($v1[2]*$v2[1]) , ($v1[2]*$v2[0])-($v1[0]*$v2[2]) , ($v1[0]*$v2[1])-($v1[1]*$v2[0]) );
	
	# calcula producto escalar de vector normal y vector del enlace donde se da el angulo
	$signo = ((($p[12]-$p[15])*($normal[0]))+(($p[13]-$p[16])*($normal[1]))+(($p[14]-$p[17])*($normal[2])));
	if($signo < 0){ $ang=-$ang } # agudo si es positivo
	
	return $ang;
PSIPRED es aceptado como uno de los mejores predictores, pero hay muchos otros algoritmos de predicción de estructura secundaria y la mejor manera de compararlos es por medio de evaluaciones automáticas a ciegas. Desgraciadamente, este tipo de iniciativas, como LiveBench o EVA, que recolectan datos de distintos algoritmos a medida que crece el PDB, son financiadas por poco tiempo y mueren.
APLICACIONES DE CÁLCULO VECTORIAL
DESAROLLO
En cálculo una derivada parcial de una función de diversas variables es su derivada respecto a una de esas variables con las otras manteniéndolas constantes. Las derivadas parciales son útiles en cálculo vectorial y geometría diferencial.
Desde hace tiempo venimos estudiando los procesos de derivación y de integración de una sola variable, al igual que sus usos y aplicaciones. Pero, al ser una sola variable nuestras derivadas pueden ser totales, en otras palabras, podemos hacer que solo un criterio varíe mientras que los demás van a permanecer constantes, y de este modo podemos encontrar la tasa de cambio (al derivar) o encontrar el área bajo la cuerva (al integrar).
Ahora incluiremos más variables dentro de una misma función, es decir, ahora los criterios de variación de nuestra función serán múltiples. Esto hará que nuestra función sea siempre dependiente de al menos una de ellas, es decir, para métodos  de derivación tendremos que suponer que solamente hay una variable, y así trataremos a todas las demás como viles constantes. Es a este procedimiento al que denominamos derivar parcialmente, ya que como su nombre lo indica, hacemos pequeñas derivadas (parcialidades) para que al unirlas podamos obtener una totalidad, aunque sea aproximada.
Cuando empezamos con esas derivadas (totales), y al igual que con este tema, se aprendió que la derivada es el cociente de un límite, que en realidad su definición era un límite en fórmula, pero que con la práctica y las reglas de derivación podíamos evitar usar los límites. Pues bueno, al hacer uso de una integral de varias variables, lo único que cambia es la característica de totalidad de dicha derivada, es decir, ahora ya no va a poder estar expresada en función de una sola variable, pero la definición de derivada se mantiene. Por lo tanto:
“Antes de correr tenemos que aprender a caminar”, por este motivo primero se tiene que mencionar como es que se denota una derivada parcial. Para dar a entender que nuestro cálculo es una derivada parcial tenemos que usar la “d de Jacobi” la cual es una pequeña “d” curvada un su extremo superior, o un número seis reflejado sobre el eje de las ordenadas. Situando el nombre de nuestra función a derivar en el numerador, y denotando en el denominador con respecto a que variable estamos derivando. 
y
Y al ser evaluadas, se marca una raya vertical al lado derecho de nuestro escrito y como subíndice colocaremos los puntos de evaluación.
Para poder calcular las derivadas parciales, se tendrá que separar en dos términos, si es que solamente se están utilizando dos variables, de este modo, en el primer término mantendremos únicamente una variable como tal, haciendo así todas las demás constantes y tratándolas como tales. Se hará lo mismo en la siguiente parte del término solamente que otra variable se establecerá con dicha funcionalidad. 
APLICACIONES DE LAS DERIVADAS PARCIALES EN ADMINISTRACION Y ECONOMIA
En esta sección estudiaremos varias aplicaciones de las derivadas parciales en administración y economía, dentro de las cuales incluiremos el costo marginal, análisis marginal, la superficie de demanda, las funciones de producción, el teorema de euler, demanda marginal, elasticidad parcial d ela demanda, productividad marginal.
a)    COSTO MARGINAL.- El costo marginal por unidad es la razón (instantánea) de cambio del costo total con respecto a la producción, esto es:
Costo Marginal = derivada del costo total
Si la función de costo de producir las cantidades x e y de dos bienes esta dado por: c = Q(x,y), entonces las derivadas parcial de c son las funciones de costo marginal, así
	
PROGRAMAS DE INF
Java
Java es un lenguaje de programación y una plataforma informática comercializada por primera vez en 1995 por Sun Microsystems. Hay muchas aplicaciones y sitios web que no funcionarán a menos que tenga Java instalado y cada día se crean más. Java es rápido, seguro y fiable. Desde portátiles hasta centros de datos, desde consolas para juegos hasta súper computadoras, desde teléfonos móviles hasta Internet, Java está en todas partes.
¿Qué recibiré al descargar software de Java?
Java Runtime Environment (JRE) es lo que se obtiene al descargar el software de Java. JRE está formado por Java Virtual Machine (JVM), clases del núcleo de la plataforma Java y bibliotecas de la plataforma Java de soporte. JRE es la parte de tiempo de ejecución del software de Java, que es todo lo que necesita para ejecutarlo en el explorador web.
¿Qué es el software del pluginde Java?
El software del plugin de Java es un componente de Java Runtime Environment. JRE permite applets escritos en el lenguaje de programación de Java para ejecutar en varios exploradores. El software del plugin de Java no es un programa autónomo y no se puede instalar de forma independiente. 
He leído las condiciones de Java Virtual Machine y de JVM. ¿Se trata de software de Java?
Java Virtual Machine es sólo un aspecto del software de Java que interviene en interacción web. Java Virtual Machine está incorporado en la descarga del software de Java y ayuda a ejecutar las aplicaciones Java. 
El programa que pondré a continuacion simplemente mostrará en pantalla la tabla del 12, algo bastante sencillo y que podrás probar tu mismo en tu casa copiando el código. Recuerda no preocuparte mucho por comprender a la perfeccion todo el bloque de sentencias (lo que habrá al interior del método main), pues todo esto y varias cosas más serán explicadas con detalle luego. Ahora si veamos.
public class Mi_Clase_1 { public static void main(String args[]) { for(int i = 0; i <= 12; i++) { System.out.print("12 * "+ i + " = " + 12 * i + "\n"); } } }
al como mencioné anteriormente, este programa de Java básico va a mostrar en pantalla una serie de resultados de multiplicar al 12 desde 12*0 hasta 12*12, es de notar que su cambias el límite del ciclo for por cualquier otro número, entonces el programa multiplicará hasta terminas, quizá si eres curioso o curiosa pruebes en cambiar el 12 por un cien o por un mil, y verás cómo funciona, en todo caso, si ejecutas este código en Netbeans, eclipse, o cualquier otro IDE para Java, deberías obtener algo como lo que se ve en la imagen.
Deberías intentar cambiar el código, mover algún número, cambiar nombres, valores y todo lo que se te ocurra en él, te aseguro que en el proceso aprenderás unas cuantas cosas valiosas que te van a facilitar el proceso de aprendizaje y mejorarán tus conocimientos, recuerda que la única forma de aprender a programar es programando, así que.... ¿Qué esperas?, recuerda que si tienes problemas o dudas durante el proceso, la sección de comentarios está allí para ayudarte.
Muy bien, ahora ya conoces un poco sobre la estructura básica de un programa en Java, vamos a seguir con otras generalidades que nos serán muy útiles durante el resto del curso y en el momento de crear nuestras propias aplicaciones. Recuerda que si tienes algún tipo de duda, comentario, problema o sugerencia puedes hacérmelo saber sin ninguna preocupación en la sección de comentarios más abajo. Para continuar con el curso, es momento de dirigirse a la sección de Paquetes en Java, nos leemos allí.
MATLAB
Millones de ingenieros y científicos de todo el mundo usan MATLAB® para analizar y diseñar los sistemas y productos que transforman nuestro mundo. MATLAB está presente en sistemas de seguridad activa de automóviles, naves espaciales interplanetarias, dispositivos de monitorización de la salud, redes eléctricas inteligentes y redes móviles LTE. Se utiliza para aprendizaje automático, procesamiento de señales, procesamiento de imágenes, visión artificial, comunicaciones, finanzas computacionales, diseño de control, robótica y muchos otros campos.
Matemáticas. Gráficas. Programación.
La plataforma de MATLAB está optimizada para resolver problemas científicos y de ingeniería. El lenguaje de MATLAB, basado en matrices, es la forma más natural del mundo para expresar las matemáticas computacionales. Las gráficas integradas facilitan la visualización de los datos y la obtención de información a partir de ellos. Una vasta biblioteca de herramientas (Toolboxes) integradas le permite empezar a trabajar inmediatamente con algoritmos esenciales para su dominio. El entorno de escritorio invita a experimentar, explorar y descubrir. Todas estas herramientas y funciones de MATLAB están probadas rigurosamente y diseñadas para trabajar juntas.
Expanda. Integre. Implemente.
MATLAB le ayuda a llevar sus ideas más allá del escritorio. Puede ejecutar sus análisis en conjuntos de datos de mayor tamaño y expandirse a clústeres y nubes. El código de MATLAB se puede integrar con otros lenguajes, lo que le permite implementar algoritmos y aplicaciones en sistemas web, empresariales o de producción.
CARACTERISTICAS 
· Lenguaje de alto nivel para cálculos científicos y de ingeniería
· Entorno de escritorio optimizado para la exploración iterativa, el diseño y la solución de problemas
· Gráficas para visualizar datos y herramientas para crear diagramas personalizados
· Aplicaciones para ajustar curvas, clasificar datos, analizar señales, ajustar sistemas de control y muchas otras tareas
· Toolboxes complementarias para una amplia variedad de aplicaciones científicas y de ingeniería
· Herramientas para crear aplicaciones con interfaces de usuario personalizadas
· Interfaces para C/C++, Java®, .NET, Python, SQL, Hadoop y Microsoft® Excel®
· Opciones de implementación libres de derechos para compartir programas de MATLAB con los usuarios finales
Ahora agreguemos 2 a cada elemento de nuestro Vector, y almacenemos el resultado en un nuevo vector.a
Observe cómo MATLAB no requiere un manejo especial de las matemáticas vectoriales o matriciales.
b = a + 2
b = 1×9
 3 4 5 6 8 6 5 6 7
La creación de gráficos en MATLAB es tan fácil como un comando. Vamos a trazar el resultado de nuestra adición vectorial con líneas de rejilla.
plot(b) grid on
MATLAB también puede hacer otros tipos de gráficos, con etiquetas de eje.
bar(b) xlabel('Sample #') ylabel('Pounds')
plot(b,'*') axis([0 10 0 10])
FORTRAN
 Este lenguaje procedural fue el primero de alto nivel (1957). 
 Desarrollado por IBM para el IBM 704. 
 Orientado a la eficiencia en la ejecución. 
 Se creó la definición estándar del lenguaje en el 66. 
 Otras versiones son FORTRAN 77 y FORTRAN 90
ejemplo
Características
Tipos de datos soportados: 
· Numéricos (enteros, reales, complejos y doble precisión).
· Boleanos (logical).
· Arreglos.
· Cadenas de caracteres.
· Archivos.
FORTRAN 90 ya es estructurado, y no requiere sentencias GOTO. Sólo admite dos ámbitos para las variables: local y global. 
Veamos ahora un ejemplo más extenso: 
Variables y constantes
· FORTRAN no es sensible a mayúsculas y minúsculas. Los nombre de variables tienen de 6 a 31 caracteres máximo y deben comenzar por una letra. Los blancos son significativos.
· Declaración explicita de variables.
· Enteras (I-N), el resto reales. (se modifica con IMPLICIT).
· Punteros: en los primeros FORTRAN no hay punteros y todas las variables se almacenan en memoria estática. En FORTRAN 90 se declaran INTEGER, POINTER::P.
· Para memoria dinámica ALLOCATE y DEALLOCATE 
Tipos de datos
· Arrays, pueden tener hasta 7 dimensiones y se guardan por colummnas.
· REAL M(20),N(-5:5)
· DIMENSION I(20,20) (tipo por nomenclatura implícita)
· Cadenas de caracteres, el primer carácter es el 1, el operador // permite concatenar cadenas.
· CHARACTER S*10, T*25
· Almacenamiento de datos. Se usa COMMON para datos compartidos y EQUIVALENCE cuando almacenamos una variable con dos posibles tipos en la misma posición de memoria (como union en C). Se usa DATA para inicializar datos estáticos.
· DATA X/1.0/,Y/3.1416/,K/20/
· Tipos definidos por el usuario, con TYPE <nombre>... END TYPE <nombre>
Control de secuencia
El conjunto de estructuras de control es limitado: 
· Expresiones, prioridad de operadores
· Enunciados
· Asignación, cuando se hace entre cadenas hay ajuste de tamaño con blancos o truncamiento.
· Condicional. Permite IF ELSE IF... Para selección múltiple SELECT CASE CASE.....CASE DEFAULT.... END SELECT
· Iteración. DO....END DO
· Nulo, se usa solo para la etiqueta. CONTINUE.
· Control de subprogramas. CALL invoca al subprograma y RETURN devuelve un valor al programa llamante.
· Construcciones propensas a error: GOTO.
Entrada y salida
· Tipos de archivos:
· Secuenciales
· De acceso directo
· Comandos: READ, WRITE, PRINT, OPEN , CLASE, INQUIRE (propiedades o estadodel archivo) REWIND y ENDFILE (para ubicar el puntero del fichero).
· Para el tratamiento de excepciones en las sentencias READ/WRITE se puede introducir la posición de la rutina de dicho tratamiento (ERR=90).
Subprogramas
· Hay tres tipos de subprogramas:
· Function, devuelven un solo valor de tipo numérico, lógico o cadena de caracteres.
· Subroutine, devuelve valores a través de variables no locales COMMON.
· Función de enunciado, permite calcular una sola expresión aritmética o lógica. 
· FN(X,Y)=SIN(X)**2-COS(Y)**2
· Gestión de almacenamiento.
· Las variables son locales o globales (COMMON)
· Recursividad: RECURSIVE FUNCTION FACTORIAL(X)
· Parámetros de subprograma. Paso por referencia.
Abstracción y encapsulación. Evaluación del lenguaje
· La abstracción es posible mediante los subprogramas y el uso de variables COMMON, aunque su uso es propenso a errores.
· FORTRAN sigue siendo utilizado en el ámbito científico y es muy eficiente realizando cálculos. 
· La estructura del programa suele ser dificil de entender.
· En FORTRAN 90 se incluye la recursividad y la memoria dinámica.
· Las etiquetas de las sentencias ya no son necesarias, ni el GOTO, pues se ha transformado en un lenguaje estructurado.
· El aspecto de los programas sigue siendo de procesamiento por lotes
Python
Python es un lenguaje de scripting independiente de plataforma y orientado a objetos, preparado para realizar cualquier tipo de programa, desde aplicaciones Windows a servidores de red o incluso, páginas web. Es un lenguaje interpretado, lo que significa que no se necesita compilar el código fuente para poder ejecutarlo, lo que ofrece ventajas como la rapidez de desarrollo e inconvenientes como una menor velocidad. 
En los últimos años el lenguaje se ha hecho muy popular, gracias a varias razones como: 
· La cantidad de librerías que contiene, tipos de datos y funciones incorporadas en el propio lenguaje, que ayudan a realizar muchas tareas habituales sin necesidad de tener que programarlas desde cero. 
· La sencillez y velocidad con la que se crean los programas. Un programa en Python puede tener de 3 a 5 líneas de código menos que su equivalente en Java o C. 
· La cantidad de plataformas en las que podemos desarrollar, como Unix, Windows, OS/2, Mac, Amiga y otros. 
· Además, Python es gratuito, incluso para propósitos empresariales. 
Características del lenguaje 
Propósito general 
Se pueden crear todo tipo de programas. No es un lenguaje creado específicamente para la web, aunque entre sus posibilidades sí se encuentra el desarrollo de páginas. 
Multiplataforma 
Hay versiones disponibles de Python en muchos sistemas informáticos distintos. Originalmente se desarrolló para Unix, aunque cualquier sistema es compatible con el lenguaje siempre y cuando exista un intérprete programado para él. 
Interpretado 
Quiere decir que no se debe compilar el código antes de su ejecución. En realidad sí que se realiza una compilación, pero esta se realiza de manera transparente para el programador. En ciertos casos, cuando se ejecuta por primera vez un código, se producen unos bytecodes que se guardan en el sistema y que sirven para acelerar la compilación implícita que realiza el intérprete cada vez que se ejecuta el mismo código.
Ejercicio 1
#! /usr/bin/env python
# -*- coding: utf-8 -*-
def max (n1, n2):
    if n1 < n2:
        print n2
    elif n2 < n1:
        print n1
    else:
        print "Son iguales"
Aclaro que uso el print para llamar a la función de la manera max(8, 5).
También se puede usar return.

Continuar navegando