ESCOM
Trabajo Terminal
2014-A017
Presentan
Aca Cruz Jonathan Vladimir
Stolar He
rnnde
z
Directores
M.C. Miguel Olvera Aldana Dr. Encarnacin Salinas Hernndez
Junio 2015
INSTITUTO POLITCNICO NACIONAL
ESCUELA SUPERIOR DE COMPTO
SUBDIRECCIN ACDEMICA
Documento Tcnico
Presentan
Aca Cruz Jonathan Vladimir
Stolar Hernndez
Directores
M.C. Miguel Olvera Aldana Dr. Encarnacin Salinas Hernndez
Resumen
locus0002@hotmail.com
mixtek@gmail.com
Advertencia
Resumen vii
1. Antecedentes 1
1.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Justificacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3. Derivacin e Integracin . . . . . . . . . . . . . . . . . . . . . 2
1.3.1. Variables y funciones . . . . . . . . . . . . . . . . . . . 2
1.3.1.1. Una variable . . . . . . . . . . . . . . . . . . 2
1.3.1.2. Constantes numricas o absolutas . . . . . . . 2
1.3.1.3. Funciones . . . . . . . . . . . . . . . . . . . . 3
1.3.1.4. Variables independiente y dependientes . . . . 3
1.3.1.5. Notacin de funciones . . . . . . . . . . . . . 3
1.3.2. Derivacin . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.2.1. Definicin . . . . . . . . . . . . . . . . . . . . 3
1.3.2.2. Reglas generales de derivacin . . . . . . . . . 4
1.3.2.3. Derivadas Sucesivas . . . . . . . . . . . . . . 5
1.3.3. Integracin . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.3.1. Reglas generales para la integracin . . . . . . 5
1.3.3.2. Integral por partes . . . . . . . . . . . . . . . 6
1.4. Ecuaciones Diferenciales . . . . . . . . . . . . . . . . . . . . . 6
1.4.1. Tipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.2. Orden . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.3. Linealidad . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.4. Mtodos de Resolucin . . . . . . . . . . . . . . . . . . 8
1.4.4.1. Mtodo de Variables Separables . . . . . . . . 8
1.4.4.2. Mtodo de Coeficientes Indeterminados . . . . 10
1.4.4.2.1. Caso 1 . . . . . . . . . . . . . . . . . 11
1.4.4.2.2. Caso 2 . . . . . . . . . . . . . . . . . 11
1.4.4.2.3. Caso 3 . . . . . . . . . . . . . . . . . 11
v
vi ndice
5. Conclusiones 77
5.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.2. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6. Trabajo a futuro 79
ndice de figuras ix
6.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.2. Base de Conocimientos . . . . . . . . . . . . . . . . . . . . . . 79
6.3. Mtodos de Resolucin . . . . . . . . . . . . . . . . . . . . . . 79
6.4. Mdulo de Graficacin . . . . . . . . . . . . . . . . . . . . . . 80
Bibliografa 81
ndice de figuras
xi
Captulo 1
Antecedentes
1.1. Introduccin
Esta seccin presenta la informacin relativa al marco terico y conceptual
del trabajo terminal, conceptos bsicos relacionados y expone el estado del
arte de las soluciones existentes para el problema del trabajo a resolver.
1.2. Justificacin
Las Ecuaciones Diferenciales Ordinarias No Lineales de Segundo Orden
pueden tener solucin basndose en la ecuacin de Riccati:
Ejemplos
Mathematica
1 DSolve [ y [ x ] + x^2y[x] + cos [xy ]== 0, y[x], x]
Derive
1
2 Captulo 1. Antecedentes
1 y + x^2y + cosxy = 0
Son las que conservan los mismos valores en todos los problemas, como
2, 5, 7, etc. Constantes arbitrarias, o parmetros, son aquellas a las que se
pueden asignar valores numricos, y que durante todo el proceso se conservan
esos valores asignados. Usualmente se representa por las primeras letras del
alfabeto.
As en la ecuacin de la recta,
x y
+ =1 (1.2)
a b
| 2| + 2 = |4| (1.3)
1.3.1.3. Funciones
1.3.2. Derivacin
1.3.2.1. Definicin
f (x + x) f (x)
f 0 (x1 ) = lm
x0 x
f (x1 + x) f (x1 )
f 0 (x1 ) = lm
x0 x
Leithold (1998)
1.3.3. Integracin
1.3.3.1. Reglas generales para la integracin
1. La integral de una suma algebrica de expresiones diferenciales es igual
a la suma algebrica de las integrales de esas expresiones
Z Z Z Z
(du + dv dw) = du + dv dw
Transponiendo,
udv = d(uv) vdu,
que se llama frmula de Integracin por Partes. Esta frmula hace que
su integracin depende de la de dv y u de du, que pueden ser formas fciles
de integrar.
Para aplicar esta frmula, debe descomponerse la diferencial dada en dos
factores, a saber, u y dv. No pueden darse instrucciones generales para la
eleccin de esos factores, pero son tiles las siguientes:
Granville (1998).
1.4.1. Tipo
Si una ecuacin slo contiene derivadas ordinarias de una o ms variables
dependientes con respecto a una sola variable independiente, entonces se dice
que es una ecuacin diferencial ordinaria. Ejemplo:
dy d2 y dy dx dy
+ 5y = ex ; 2 + 6y = 0; + = 2x + y (1.4)
dx dx dx dt dt
Son ecuaciones diferenciales ordinarias.
1.4.2. Orden
El orden de una ecuacin diferencial (ordinaria o en derivadas parciales)
es el de la derivada de mayor orden en la ecuacin. Ejemplo:
d2 y dy
2
+ 5( )3 (1.6)
dx dx
Es una ecuacin diferencial ordinaria de segundo orden.
1.4.3. Linealidad
Se dice que una ecuacin diferencial ordinaria de orden n es lineal cuando
la ecuacin es de la forma descrita por:
dn y dn1 y dy
an (x) + a n1 (x) + ... + a 1 (x) + a0 (x)y = g(x) (1.8)
dxn dxn1 dx
En esta ltima ecuacin, vemos las dos propiedades caractersticas de las
ecuaciones diferenciales lineales:
1. La variable dependiente y y todas sus derivadas son de primer grado;
esto es, el exponente de todo trmino donde aparece y es 1.
2. Cada coeficiente slo depende de x, que es la variable independiente.
Las ecuaciones
00 0 d3 y dy
(y x)dx + 4xdy = 0; y 2y + y = 0; 3 + x 5y = ex (1.9)
dx dx
Son a su vez ecuaciones diferenciales lineales ordinarias de primer, segundo
y tercer orden.
dy
= g(x)h(y) (1.12)
dx
Es separable, o de variables separables. Por ejemplo, las ecuaciones:
dy dy
= y 2 xe3x+4y y = y + sen(x) (1.13)
dx dx
Son separables y no separables, respectivamente. En la primera, factorizamos
f (x, y) = y 2 xe3x+y como sigue:
g(x) h(y)
z }| { z }| {
f (x, y) = y 2 xe3x+4y = (xe3x ) (y 2 e4y ) (1.14)
dy
p(y) = g(x) (1.15)
dx
Donde, por comodidad, p(y) representa a 1/h(y). As, vemos de inmediato
que la ecuacin se reduce cuando h(y) = 1. Ahora bien, si y = (x) representa
una solucin, se debe cumplir p((x))0 (x) = g(x), asi que:
Z Z
0
p((x)) (x)dx = g(x)dx (1.16)
YG = YH + YP (1.18)
Donde:
YG = Solucin General
YH = Solucin Homognea
YP = Solucin Particular
y = Cemx
dy
= y 0 = Cmemx
dx
dy
= y 00 = Cm2 emx
dx2
Tenemos:
a2 Cm2 emx + a1 Cmemx + a0 Cemx = 0
Factorizamos:
Cemx (a2 m2 + a1 m + a0 ) = 0
Cemx 6= 0 (a2 m2 + a1 m + a0 ) = 0
a2 m2 + a1 m + a0
p
a1 a21 4a2 a0
m1, 2 =
2a2
Para lo que tenemos tres tipos diferentes de solucin:
1.4. Ecuaciones Diferenciales 11
1.4.4.2.1. Caso 1
1.4.4.2.2. Caso 2
m1 = m2 = m R a21 4a2 a0 = 0
1.4.4.2.3. Caso 3
m = i
Para resolver la ecuacin particular, se asume que f (x) es continua y deriva-
ble en todo su dominio.
Ejemplos Propuestas
f (x) YP
3 A = constante
x Ax + B
x3 Ax3 + Bx2 + Dx + E
cos(x)/sen(x) Acos(x) + Bsen(x)
ex Aex
m2 + 4 = 0
m1,2 = 2i
= 0, = 2
YH = C1 cos(2x) + C2 sen(2x)
f (x) = e3x
YP = Ae3x
y 0 = 3Ae3x , y 00 = 9Ae3x
9Ae3x + 4Ae3x = 13Ae3x
1 3x
13Ae3x = e3x YP = e
13
La solucin general es:
1 3x
YG = C1 cos(2x) + C2 sen(2x) + e
13
Dennis G. Zill (2008).
YP = U1 y1 + U2 y2 (1.22)
W1 W2
donde y1 y y2 son solucin de la Ecuacin Diferencial y U10 = W
y U20 = W
Nota:
y1 y2
W = 0 (1.23)
y1 y20
Es el wronskiano del sistema.
0 y2
W1 = (1.24)
f (x) y20
y1 0
W2 = 0 (1.25)
y1 f (x)
1.4. Ecuaciones Diferenciales 13
4m2 + 36m = 0
36
m2 =
4
2
m = 9 m1,2 = 3i
YH = C1 cos(3x) + C2 sen(3x)
Segundo, calculamos YP = U1 y1 + U2 y2 .
0 sen(3x)
W1 csc(3x) 3cos(3x) sen(3x)csc(3x) 1
U10 = = = 2 2
=
W cos(3x) sen(3x) 3cos (3x) + 3sen 3x 3
3sen(3x) 3cos(3x)
Z Z
0 1
U1 = dx
3
1
U1 = x
3
cos(3x) 0
W2 3sen(3x) csc(3x) ctg(3x) cos(3x)
U20 = = = =
W 3 3 3sen(3x)
Z Z
1 cos(3x)
U20 = dx
3 sen(3x)
1
U2 = ln(sen(3x))
9
La solucin particular es:
1 1
xcos(3x) + ln(sen(3x))sen(3x)
3 9
Finalmente
1 1
YG = C1 cos(3x) + C2 sen(3x) xcos(3x) + ln(sen(3x))sen(3x)
3 9
Dennis G. Zill (2008).
14 Captulo 1. Antecedentes
Ejemplo: Resolver
d2 y dy
x2 2
2x 4y = 0
dx dx
Solucin. En lugar de memorizar la ecuacin, para comprender el origen
y la diferencia entre esta nueva forma de la ecuacin auxiliar y la que ob-
tuvimos, las primeras veces es preferible suponer que la solucin es y = xm .
Diferenciamos dos veces
dy
= mxm1 , = m(m 1)xm2 , (1.33)
dx
Y sustituimos en la ecuacin diferencial
d2 y dy
x2 2
2x 4y = x2 m(m 1)xm2 2xmxm1 4xm (1.34)
dx dx
= xm (m(m 1) 2m 4) = xm (m2 3m 4) = 0 (1.35)
si m2 3m 4 = 0.
Pero (m + 1)(m 4) = 0,
significa que m1 = 1ym2 = 4,
asi que
y = C1 x1 + C2 x4 (1.36)
Ejemplo: Resolver
d2 y dy
4x2 2
+ 8x + y = 0 (1.43)
dx dx
m
Solucin: La sustitucin y = x da
d2 y dy
4x2 2
+8x +y = xm (4m(m1)+8m+1) = xm (4m2 +4m+1) = 0 (1.44)
dx dx
cuando 4m2 + 4m + 1 = 0, o (2m + 1)2 = 0. Como m1 = 12 , la solucion
general es Para las ecuaciones de orden superior se puede demostrar que si
m1 , es raz de multiplicidad k, entonces
2.1. Introduccin
En este captulo se describen los resultados de la investigacin relizada
respecto al cmputo simblico y los diferentes lenguajes de programacin
que lo implementan, con objeto de discriminar entre los mismos y tomar una
decisin sobre cul utilizaremos para este trabajo.
19
20 Captulo 2. Estado del Arte
2.3.2. Lisp
Lisp es una familia de lenguajes de programacin que se distingue por
imponer la notacin prefija. Lisp es un lenguaje orientado a expresiones, lo
que significa que todo el cdigo y los datos son escritos como expresiones
para despus ser evaluados. Cuando una expresin es evaluada, produce un
valor, el cual puede ser embebido en otra expresin. Cada valor puede tener
cualquier tipo de dato.
2.3.2.2. FEMLISP
FEMLISP es una biblioteca para resolver ecuaciones diferenciales, pero
su mtodo de solucin est basado en el Mtodo del Elemento Finito (FEM),
el cual es un mtodo numrico para encontrar soluciones aproximadas a pro-
blemas de ecuaciones diferenciales parciales. Neuss (2010).
1 >>> d i f f ( x 4 , x , 3 )
24 x
7
exyz
xy 2 z 4
El resultado es el siguiente:
Resultado:
Para evaluar una integral definida hay que especificar tres valores: la
variable de integracin, el lmite inferior y el lmite superior.
Ejemplo de la Integral Definida de 0 a (oo) de ex , dx:
1 >>> i n t e g r a t e ( exp(x ) , ( x , 0 , oo ) )
2.3.5. Prolog
Prolog es un lenguaje de programacin lgica y declarativa, en el cual se
describe una situacin mediante una sentencia y, utilizando Clculo Proposi-
cional y una base de conocimientos, se evala si dicha sentencia es verdadera
o falsa. El intrprete o compilador dar una solucin booleana y , si contiene
variables, qu valores de las variables son necesarios para la evaluacin.
Prolog est basado en la lgica de predicados de primero orden (First
Order Predicate Logic o FOPL).
Prolog es un lenguaje muy conocido en reas acadmicas de las ciencias
de la computacin como es la Inteligencia Artificial y es especialmente utili-
zado para el reconocimiento de patrones y programacin lgica. Wielemaker
(1987).
Derivadas trigonomtricas
1 d( s i n (W) , X, Z c o s (W) ) : / * d ( s i n ( W ) ) / d X = Z * c o s ( W ) */
2 d ( W, X, Z ) . /* donde Z = d ( W ) / dX */
3
4 d ( c o s (W) , X, (Z s i n (W) ) ) : / * d ( c o s ( W ) ) / d X = - ( Z * s i n ( W ) ) */
5 d ( W, X, Z ) . /* donde Z = d ( W ) / dX */
6
7 d ( t a n (W) , X, ( Z s e c (W) ^2) ) : / * d ( t a n ( W ) ) / d X = Z * s e c ( W ) ^ 2 */
8 d ( W, X, Z ) . /* donde Z = d ( W ) / dX */
9
10 d ( c o t (W) , X, (Z c o s e c (W) ^2) ) : / * d ( c o t ( W ) ) / d X = - Z * c o s e c ( W ) ^ 2 */
11 d ( W, X, Z ) . /* donde Z = d ( W ) / dX */
12
13 d( s e c (W) , X, ( Z s e c (W) t a n (W) ) ) : / * d ( s e c ( W ) ) / d X = s e c ( W ) * t a n ( W ) * /
14 d ( W, X, Z ) . /* donde Z = d ( W ) / dX */
15
16 d( c o s e c (W) , X, (Z c o s e c (W) c o t (W) ) ) : / * d ( c o s e c ( W ) ) / d X = - c o s e c ( W ) * c o t ( W ) * /
17 d ( W, X, Z ) . /* donde Z = d ( W ) / dX */
18
19 d( a r c s i n (W) , X, Z/ s q r t (1W^2) ) : /* d ( a r c s i n ( W ) ) / dX = Z / s q r t (1 - W ^2) */
20 d ( W, X, Z ) . /* donde Z = d ( W ) / dX */
21
22 d( a r c c o s (W) , X, (Z/ s q r t (1W^2) ) ) : /* d ( arccos ( W ) ) / dX = -( Z / s q r t (1 - W ^ 2 ) ) * /
23 d ( W, X, Z ) . /* donde Z = d ( W ) / dX */
24
25 d( a r c t a n (W) , X, Z/(1+W^2) ) : /* d ( arctan ( W ) ) / dX = Z /(1+ W ^2) */
26 d ( W, X, Z ) . /* donde Z = d ( W ) / dX */
27
28 d( a r c c o t (W) , X, (Z/(1+W^2) ) ) : / * d ( a r c c o t ( W ) ) / d X = -( Z / ( 1 + W ^ 2 ) ) */
29 d ( W, X, Z ) . /* donde Z = d ( W ) / dX */
30
2.3. Lenguajes de Programacin Simblica 27
2.5. Deliberacin
Con base en la investigacin antes realizada, se tom la decisin de utilizar
Prolog para el desarrollo de nuestro Trabajo Terminal por diversas razones:
3.1. Introduccin
En este captulo se presentan las fases de Anlisis y Diseo del sistema
de acuerdo con la metodologa elegida para el presente Trabajo Terminal .
1. Anlisis de requerimientos.
3. Implementacin.
4. Pruebas.
5. Mantenimiento.
31
32 Captulo 3. Anlisis y Diseo del sistema
3.3.2. Alcances
3.3.2.1. Notacin
El sistema deber entender la notacin Leibniz mediante un analizador
lxico-sintctico.
y = y(x)
d
y0 = y(x)
dx
se representara en notacin de Leibniz de esta forma:
dy
y0 =
dx
3.3.2.2. Resultados
El sistema ser capaz de resolver derivadas e integrales de manera in-
terna con el objetivo de dar solucin a ecuaciones diferenciales lineales no
homogneas, de segundo orden con coeficientes no constantes. Si la ecuacin
diferencial no tiene solucin o la ecuacin diferencial est fuera del alcance
del sistema, se mostrar un mensaje de error.
3.3.3. Limitaciones
El sistema no podr resolver ecuaciones diferenciales no lineales, homo-
gneas, ni de orden superior.
3.4. Diseo del Sistema 33
Mdulo Nombre
1 Entrada y salida de datos (interfaz).
2 Analizador Lxico-Sintctico.
3 Base de conocimiento en Prolog.
Algoritmo para resolver ecuaciones diferenciales lineales no homo-
4
gneas de segundo orden con coeficientes no constantes.
5 Algoritmo para simplificar expresiones matemticas.
Clave Descripcin
El sistema ser capaz resolver ecuaciones diferenciales lineales no
RF01
homogneas de segundo orden con coeficientes no constantes.
El sistema podr representar las ecuaciones diferenciales escritas
RF02
por el usuario en notacin Leibniz.
RF03 El sistema deber contar con una interfaz de usuario.
RF04 El sistema deber mostrar el resultado en la interfaz.
Clave Descripcin
El sistema mostrar una previsualizacin de la expresin matem-
RNF01
tica escrita por el usuario.
El sistema validar la completez y correcta sintaxis de la expresin
RNF02
escrita por el usuario mediante el Analizador Lxico-Sintctico.
RNF03 La interfaz de usuario del sistema ser sencilla y atractiva.
34 Captulo 3. Anlisis y Diseo del sistema
Trayectoria Principal
3. Fin de la trayectoria.
Trayectoria Principal
4. Fin de la trayectoria.
Trayectoria Principal
7. 7. Fin de la trayectoria.
3.4. Diseo del Sistema 37
siguiente:
3.4.2.4. Flujo
El usuario ingresar su consulta a travs de los teclados en los diferentes
pneles (versin escritorio y mvil) o a travs del teclado de su computadora
(versin escritorio).
Imagenes/Vectorial/interfaz5sinsolucion.png
Imagenes/Vectorial/interfaz5sinsolucion1.png
1. Clculo Diferencial.
2. Clculo Integral.
3. Ecuaciones Diferenciales.
4. Frmula de Solucin.
d/dx((x^2+3x))
d((x^2+3*x), x, R).
51 i f ( isNaN ( p2 ) ) {
52 return p1 + " / " + p2 ;
53 }
54 return p a r s e I n t ( p1 ) / p a r s e I n t ( p2 ) ;
55 }
56 function d i v i s i o n U n o (num , dem ) {
57 i f (num == dem ) {
58 return " 1 " ;
59 } e l s e i f (num == 0 ) {
60 return " 0 " ;
61 } e l s e i f ( dem . i n d e x O f ( * ) != 1){
62 var aux = dem . s p l i t ( " * " ) ;
63 var r e s = [ ] ;
64 var b a n d e r a = f a l s e ;
65 f o r ( i =0; i <aux . l e n g t h ; i ++){
66 i f ( aux [ i ] == num) {
67 num = " " ;
68 b a n d e r a = true ;
69 } else {
70 i f ( i == aux . l e n g t h 1){
71 r e s . push ( aux [ i ] ) ;
72 } else {
73 r e s . push ( aux [ i ] ) ;
74 r e s . push ( " * " ) ;
75 }
76
77 }
78 }
79 i f ( bandera )
80 return r e s . j o i n ( " " ) ;
81 else
82 return num + " / " + dem ;
83 } else {
84 return num + " / " + dem ;
85 }
86 }
87 }
88 start
89 = additive
90
91 additive
92 = left : multiplicative "+" r i g h t : a d d i t i v e { return suma_ ( l e f t , r i g h t ) ; }
93 / resta
94
95 resta
96 = left : multiplicative " -" r i g h t : r e s t a { return r e s t a _ ( l e f t , r i g h t ) ; }
97 / multiplicative
98
99 multiplicative
100 = l e f t : primary " * " r i g h t : m u l t i p l i c a t i v e { return m u l t i p l i c a c i o n _ ( l e f t , right ) ; }
101 / division
102
103 division
104 = l e f t : primary " / " r i g h t : d i v i s i o n { return d i v i s i o n _ ( l e f t , r i g h t ) ; }
105 / primary
106
107 primary
108 = exponentes
109 / " d / d x ( " p r i m e r a : a d d i t i v e " ) " s i g n o :[+ ]+ " d \ u 0 0 B 2 / d x \ u 0 0 B 2 ( " s e g u n d a : a d d i t i v e " ) = "
funcion : additive
110 { return " d ( " + p r i m e r a + " , x , R ) ; " + s i g n o + " d ( " + s e g u n d a + " , x , R ) ; " + " i n t ( " +
d i v i s i o n U n o ( primera , segunda ) + " ,x , R ) ; " + " i n t ( " + d i v i s i o n U n o ( funcion , segunda ) +
" ,x , R ) ; " ; }
111 / " d \ u 0 0 B 2 / d x \ u 0 0 B 2 ( " s e g u n d a : a d d i t i v e " ) " s i g n o :[+ ]+ " d / d x ( " p r i m e r a : a d d i t i v e " ) = "
funcion : additive
112 { return " d ( " + p r i m e r a + " , x , R ) ; " + s i g n o + " d ( " + s e g u n d a + " , x , R ) ; " + " i n t ( " +
d i v i s i o n U n o ( primera , segunda ) + " ,x , R ) ; " + " i n t ( " + d i v i s i o n U n o ( funcion , segunda ) +
" ,x , R ) ; " ; }
113 / " d / d x ( " a d d i t i v e : a d d i t i v e " ) = " f u n c i o n : a d d i t i v e { return " d ( " + a d d i t i v e + " , x , R ) ; "
+ funcion ; }
3.4. Diseo del Sistema 55
d^2/dx^2((x^2+3x))
\frac{d^2}{dx^2}(x^2+3x)
16 function r e s t a _ ( p1 , p2 ) {
17 return p1 + " - " + p2 ;
18 }
19 function m u l t i p l i c a c i o n _ ( p1 , p2 ) {
20 i f ( isNaN ( p1 ) ) {
21 return p1 + " * " + p2 ;
22 }
23 i f ( isNaN ( p2 ) ) {
24 return p1 + p2 ;
25 }
26 return p1 + " * " + p2 ;
27 }
28 function d i v i s i o n _ ( p1 , p2 ) {
29
30 return " \ \ f r a c { " + p1 + " } { " + p2 + " } " ;
31 }
32 function mathJaxRender ( e ) {
33 return " $ "+e+" $ " ;
34 }
35 }
36 start
37 = additive
38
39 additive
40 = left : multiplicative "+" r i g h t : a d d i t i v e { return suma_ ( l e f t , r i g h t ) ; }
41 / resta
42
43 resta
44 = left : multiplicative " -" r i g h t : r e s t a { return r e s t a _ ( l e f t , r i g h t ) ; }
45 / multiplicative
46
47 multiplicative
48 = l e f t : primary " * " r i g h t : m u l t i p l i c a t i v e { return m u l t i p l i c a c i o n _ ( l e f t , right ) ; }
49 / division
50
51 division
52 = l e f t : primary " / " r i g h t : d i v i s i o n { return d i v i s i o n _ ( l e f t , r i g h t ) ; }
53 / primary
54
55 primary
56 = exponentes
57 / " d / d x ( " a d d i t i v e : a d d i t i v e " ) " { return " \ \ f r a c { d } { d x } ( " + a d d i t i v e + " ) " ; }
58 / " d \ u 0 0 B 2 / d x \ u 0 0 B 2 ( " a d d i t i v e : a d d i t i v e " ) " { return " \ \ f r a c { d ^ 2 } { d x ^ 2 } ( " + a d d i t i v e +
")" ; }
59 / " ( " a d d i t i v e : a d d i t i v e " ) " { return a d d i t i v e ; }
60 / " \ u 2 2 2 B ( " a d d i t i v e : a d d i t i v e " ) " { return " \ \ \ \ i n t ( " + a d d i t i v e + " ) d x " ; }
61
62 exponentes
63 = l e f t : combinado r i g h t : " \ u 0 0 B 2 " { return l e f t + " ^ " + 2 ; }
64 / l e f t : combinado r i g h t : " \ u 0 0 B 3 " { return l e f t + " ^ " + 3 ; }
65 / l e f t : combinado r i g h t : " \ u 2 0 7 F " g r a d o : i n t e g e r { return l e f t + " ^ " + g r a d o ; }
66 / l e f t : e x p o n e n c i a l r i g h t : " \ u 2 0 7 F " g r a d o : combinado { return l e f t + " ^ " + g r a d o ; }
67 / combinado
68
69 combinado
70 = left : variables r i g h t : combinado { return m u l t i p l i c a c i o n _ ( l e f t , r i g h t ) ; }
71 / variables
72
73 variables " variables "
74 = v a r s : [ wxyz ] i+ { return c a d e n a M u l t i p l i c a t i v a ( v a r s ) ; }
75 / integer
76
77 exponencial " exponencial "
78 = exp : [ e ] { return " e " ; }
79
80 integer " integer "
81 = d i g i t s : [ 0 9 ] + { return c a d e n a M u l t i p l i c a t i v a ( d i g i t s ) ; }
3.4. Diseo del Sistema 57
R=*(*(3,x),+(3,x))
(3*x)(3+x)
45 i f ( p1 == " 0 " ) {
46 return " 0 " ;
47 }
48 i f ( p1 == p2 ) {
49 return " 1 " ;
50 }
51 i f ( isNaN ( p1 ) ) {
52 return p1 + " / " + p2 ;
53 } i f ( isNaN ( p2 ) ) {
54 return p1 + " / " + p2 ;
55 }
56 return p a r s e I n t ( p1 ) / p a r s e I n t ( p2 ) ;
57 }
58 }
59 start
60 = suma
61 suma
62 = " R = + ( " sumandoA : e x p o n e n c i a l " , " sumandoB : suma " ) " { return suma_ ( sumandoA , sumandoB )
;}
63 / " + ( " sumandoA : e x p o n e n c i a l " , " sumandoB : suma " ) " { return suma_ ( sumandoA , sumandoB ) ; }
64 / resta
65 resta
66 = " R = - ( " sumandoA : e x p o n e n c i a l " , " sumandoB : r e s t a " ) " { return r e s t a _ ( sumandoA , sumandoB
) ;}
67 / " - ( " sumandoA : e x p o n e n c i a l " , " sumandoB : r e s t a " ) " { return r e s t a _ ( sumandoA , sumandoB )
;}
68 / multiplicacion
69
70 multiplicacion
71 = " R = * ( " sumandoA : e x p o n e n c i a l " , " sumandoB : m u l t i p l i c a c i o n " ) " { return m u l t i p l i c a c i o n _
( sumandoA , sumandoB ) ; }
72 / " * ( " sumandoA : e x p o n e n c i a l " , " sumandoB : m u l t i p l i c a c i o n " ) " { return m u l t i p l i c a c i o n _ (
sumandoA , sumandoB ) ; }
73 / division
74
75 division
76 = " R = / ( " sumandoA : e x p o n e n c i a l " , " sumandoB : d i v i s i o n " ) " { return d i v i s i o n _ ( sumandoA ,
sumandoB ) ; }
77 / " / ( " sumandoA : e x p o n e n c i a l " , " sumandoB : d i v i s i o n " ) " { return d i v i s i o n _ ( sumandoA ,
sumandoB ) ; }
78 / sencillo
79
80 sencillo
81 = " R = " atom : e x p o n e n c i a l { return atom ; }
82 / exponencial
83
84 exponencial
85 = " e x p ( " atom : s t a r t " ) " { return " e ^ ( " + atom + " ) " ; }
86 / atom
87
88 atom
89 = c a d e n a : [ 0 9 xwxyz ]+ { return c a d e n a . j o i n ( " " ) ; }
3.4.5.1. Introduccin
Custom Elements
HTML Templates
Shadow DOM
HTML Imports
60 Captulo 3. Anlisis y Diseo del sistema
Document.registerElement()
Element.createShadowRoot()
4.1. Introduccin
En este captulo se presenta la fase de desarrollo del sistema de acuerdo a
lo planteado en la etapa de anlisis y diseo. El desarrollo se compone de la
implementacin de los mdulos y las pruebas que se realizaron para verificar
la correctez de los resultados.
4.2. Mdulos
4.2.1. Cliente
El mdulo del cliente consta de la interfaz grfica y los analizadores
lxicos-sintcticos que se encuentran embebidos en el mdulo, pero por su
grado de complejidad los tratamos como mdulos independientes.
63
64 Captulo 4. Desarrollo del sistema
4.2.1.1. Problemtica
La principal dificultad encontrada en este mdulo fue la curva de apren-
dizaje del framework y sus nuevas tecnologas. Otro inconveniente de usar
herramientas que se encuentran en etapa de desarrollo es que la documenta-
cin a veces es limitada y tiende a cambiar constantemente.
4.2.2. Servidor
El mdulo del servidor se compone de la base de conocimientos desarrolla-
da en Prolog y un servlet de Java que utilizamos para escuchar las peticiones
que realiza el cliente y procesarlas.
4.2.2.1. Problemtica
La dificultad ms grande de este mdulo fue que no conocamos el len-
guaje de programacin. Prolog ni el paradigma de programacin lgica que
utiliza, el cual es muy distinto a los paradigmas ms conocidos, como la pro-
gramacin orientada a objetos o la programacin imperativa de lenguajes
como C, Java, Python, etc.
alto nivel que consta de clases y mtodos para el programador Java. Cabe
destacar que la interfaz a bajo nivel permite migrar implementaciones hechas
en C a Java por medio de la FLI. Esta tecnologa est disponible desde la
versin 3.1.0 de SWI-Prolog y se distribuye bajo licencia GNU-GPL (GNU
General PublicLicense).
4.2.3.1. Problemtica
La tecnologa para realizar los ALS fue PEG.js Majda (2013), un ge-
nerador de analizadores sintcticos para JavaScript, el cual integra anlisis
lxico y sintctico para cada gramtica generada y est basado en un tipo de
gramticas formales analticas, llamadas gramticas de anlisis sintctico de
expresiones (Parsing Expression Grammars o PEGs), que aunque son simi-
lares a las gramticas libres de contexto (Context Free Grammars o CFGs),
tienen varias diferencias. La principal diferencia entre las PEGs y las CFGs
es que las PEGs no pueden ser ambiguas; si una cadena es procesada, ge-
nerar nicamente un rbol de derivacin, esto implica que en las PEGs el
operador de eleccin tiene un orden, lo que infiere que el orden de eleccin
no es conmutativo, como lo es en las CFGs.
Una de las ventajas de las PEGs es que estas gramticas son ms pode-
rosas que el simple uso de expresiones regulares, aunque tambin requieren
ms uso de memoria.
a2 y 00 + a1 y 0 + uy = f (4.1)
los coeficientes utilizados en los conjuntos de datos son los siguientes:
a2 = a2 (x)
a1 = a1 (x)
f = f (x)
u = u(x)
a02
u = (a01 a1 ) (4.2)
a2
por lo que la ecuacin (4.1) queda de la siguiente forma:
a02
a2 y 00 + a1 y 0 + (a01
a1 )y = f (x) (4.3)
a2
Esta ecuacin ser la que utlizaremos para realizar la evaluacin de re-
sultados. Cabe mencionar que en Mathematica 10 se tiene que calcular el
68 Captulo 4. Desarrollo del sistema
4.3.2. Conjunto 1
El primer conjunto de datos que probamos fue el ms sencillo posible
para una ecuacin diferencial lineal no homognea de segundo rden con
coeficientes no constantes. Estos coeficientes: a2 , a1 y f toman los siguientes
valores:
a2 = x
a1 = x
a02 = 1
a01 = 1
f =4
a02
u = (a01 a2 1
a) = (1 x1 x) = 4
xy 00 + xy 0 = 4
4.3.2.1. Mathematica 10
DSolve[xy[x] + xy 0 [x] == 4, y, x]
Resultado
Z
x
e ex [4 log(x)]dx + C1 ex ex + C2 ex
Captura de pantalla
4.3. Evaluacin de Resultados 69
4.3.3. Conjunto 2
El segundo conjunto de datos consta de los siguientes valores para los
coeficientes de la frmula:
a2 = x
a1 = x
a02 = 1
a01 = 1
f = xsin(x)
a02
u = (a01 a2 1
a) = (1 x1 x) = 0
xy 00 + xy 0 = xsin(x)
70 Captulo 4. Desarrollo del sistema
4.3.3.1. Mathematica 10
Resultado
nn h Rx ioo
R K[2] eK[1] xSin[K[1]]
y Function {x}, C[2] + 1 eK[2] C[1] + eK[2] 1 K[1]
dK[1] dK[2]
sin(x) cos(x)
+ C2 ex + C1
2
Captura de pantalla
4.3.4. Conjunto 3
El tercer conjunto de datos tiene los siguientes valores para los coeficientes
de la frmula:
4.3. Evaluacin de Resultados 71
a2 = cos(x)
a1 = sin(x)
a02 = sin(x)
a01 = cos(x)
f = tan(x)
sin2 (x)
cos(x)y 00 + sin(x)y 0 + + cos(x)y = tan(x)
cos(x)
4.3.4.1. Mathematica 10
Resultado
hn o i
Sin[x]2 0 00 0
DSolve cos[x] + cos[x]
y[x] + Sin[x]y [x] + Cos[x]y [x] == Tan[x], y[0] == 0, y [0] == 0 , y, x
Captura de pantalla
72 Captulo 4. Desarrollo del sistema
4.3.5. Conjunto 4
El primer conjunto de datos que probamos fue el ms sencillo posible
para una ecuacin diferencial lineal de segundo rden con coeficientes no
constantes. Estos coeficientes: a2 , a1 y f toman los siguientes valores:
a2 = 1
a1 = cot(x)
a02 = 0
f = x2
a02
u = (a01 a2 1
a) = csc2 (x)
4.3.5.1. Mathematica 10
Resultado
Podemos observar que con este conjunto, Mathematica tampoco pudo dar
solucin, mientras que el sistema s lo hizo.
4.3.6. Conjunto 5
El conjunto de datos 5 tiene los siguientes valores:
a2 = cos(x)
74 Captulo 4. Desarrollo del sistema
a1 = sin(x)
a02 = sin(x)
a01 = cos(x)
f = x2 cos(x)
a02
u = (a01 a2 1
a) = sec2 (x)
4.3.6.1. Mathematica 10
Resultado
DSolve [{Sec[x]2 y[x] Sin[x]y 0 [x] + Cos[x]y 00 [x] == x2 Cos[x], y[0] == 0, y 0 [0] == 0} , y, x]
Conclusiones
5.1. Introduccin
En este captulo se presentan las conclusiones de los integrantes del equi-
po de manera individual.
5.2. Conclusiones
El objetivo general del proyecto, que era la reoslucin de ecuaciones dife-
renciales lineales de segundo orden con coeficientes no constantes mediante
el modelado de la tcnica de solucin del Dr. Encarnacin Salinas Hernndez
se cumpli satisfactoriamente.
Comparando los resultados del prototipo con otro sistema que da solucin
a ecuaciones diferenciales (Mathematica 10) podemos afirmar que nuestro
sistema resuelve analticamente algunas E.D. lineales de segundo orden con
coeficientes variables, que Mathematica no resuelve, o en muchas ocasiones
tarda un tiempo considerable en generar una salida (ms de 10 minutos),
llegando a la misma solucin, lo cual verifica la correctez de los resultados
del prototipo.
77
78 Captulo 5. Conclusiones
materia.
Trabajo a futuro
6.1. Introduccin
En este captulo se expone el desarrollo que se tendra que realizar para
darle continuidad al trabajo y ampliar sus capacidades.
79
80 Captulo 6. Trabajo a futuro
81
82 Bibliografa