Mathematica (Formulas)
Ante todo quiero decir que esto es una pequeña guía a seguir para saber las fórmulas a usar.
Para poder desarrollar bien el ejercicio será necesario saber la teoría necesaria
Para definir cualquier cosa que deseemos definir simplemente le ponemos el nombre que
queramos = lo que vayamos a definir, por ejemplo:
- MatrizA = [{fila1-,,fila2-,,fila3-+ Donde “MatrizA” es una matriz que queremos definir
Para que los números no salgan fraccionarios ni “muy grandes” deberemos poner tras la
“formula” lo siguiente -> //N
- Ejemplo: Eigenvalues[hes]//N
Para representar igualdades usamos la orden “curvas nivel”:
-
Dónde: curvasNivel[{a},{b},{c},{d}]
- a) Es donde coloca el conjunto
- b) Se coloca el rango de la x, en este caso desde -5 a 5
- c) Se coloca el rango de la y, en este caso desde -5 a 5
- d) Se coloca lo que hay posterior a la igualdad (=)
Sin embargo, para representar desigualdades usamos la orden “region”:
-
Dónde: region[{a},{b},{c}]
- a) Es donde se coloca el conjunto
- b) Se coloca el rango de la x, en este caso desde -5 a 5
- c) Se coloca el rango de la y, en este caso desde -5 a 5
Si quisiéramos poner más de una desigual tanto en “curvasNivel” como “region” simplemente
pondremos &&. Cada vez que queramos añadir una simplemente debemos poner el &&
- función[{conjunto && conjunto2),{b},{c}]
,Para estudiar la concavidad y la convexidad nos hará falta saber realizar la Hessiana y la
función “Eigenvalues”:
- Primero debemos definir la función y es tan sencillo como hemos explicado
anteriormente, en este caso la llamaremos “fun”
- Después debemos realizar la “hessiana”, la cual definiremos como “hes” y lo haremos
de la siguiente forma:
o hes=hessiana[fun, {x,y,z}]
Donde fun es la función que hemos definido anteriormente
Donde {x,y,z} son las variables que tiene la función
- Posteriormente realizaremos “Eigenvalues” para realizar los valores propios de esta
hessiana:
o Eigenvalues[hes]
Donde hes es la hessiana que hemos definido anteriormente
- Si por ejemplo quisiéramos estableces un conjunto de puntos para los que la función
sea estrictamente cóncava realizaremos “Reduce”:
o Reduce[{a}, b]
Donde a son los valores obtenido al hacer Eigenvalues que aún posea
incógnita (es decir que tenga una letra).
Donde b es la incógnita (la letra).
En el caso de que necesitemos las curvas de nivel usaremos la función
“curvasNivelCampoGradientes”:
- curvasNivelCampoGradientes[2*x+y,{x,0,6},{y,0,6},10]
Dónde: curvasNivelCampoGradientes[a,{b},{c},d]
- a) Es la función objetivo que vamos a optimizar o maximizar
- b) Es el rango de la x, en este caso irá desde 0 hasta 6
- c) Es el rango de la y, en este caso irá desde 0 hasta 6
- d) Es el número de curvas de nivel que queramos representar, en este caso
representará 10 curvas de nivel
Para representar estos dibujos en uno mismo simplemente debemos usar la función “Show”:
- Show[c1,fun]
Dónde: Show[a,b]
- a) El primer gráfico que queramos coger
- b) El segundo gráfico que queramos coger
- NOTA: Si quisiéramos unir tres, simplemente ponemos otra coma y el nombre del
tercero y así todos.
, Si tuviéramos que resolver analíticamente un problema de programación sin restringir lo
haríamos de la siguiente forma:
1) Condiciones de primer orden. Calculamos los puntos candidatos a óptimo
a. Llamaremos en este caso a la función como “fun”
b. Luego haremos el gradiente:
i. Solve[gradiente[fun, {x,y,z}]=={0,0,0},{x,y,z}]
2) Tras hallarlos, realizaremos las condiciones de segundo orden
a. Haremos la hessiana, hes=hessiana[fun,{x,y,z}]
b. Luego hallaremos los valores propios con Eigenvalues, Eigenvalues[hes]
3) Por último veremos qué tipo de punto es.
En el caso de resolver analíticamente un problema de Programación con restricciones de
igualdad lo haríamos de la siguiente forma:
1) Deberemos primero hacer un análisis, determinar el Teorema de Weierstrass y
Teorema Local-Global
2) Posteriormente lo resolveremos con el Mathemática de la siguiente forma
a. Función de Lagrange: lag=x*y-λ(x+y-1) OJO es un ejemplo
i. Si tuviéramos más de una restricción llamaríamos a las lambdas según
apareciera, es decir, λ1(restriccion1)- λ2(restricción2)- λn(restricción n)
b. Luego realizaríamos las condiciones de primer orden:
i. Haríamos el gradiente: grlag=gradiente[lag,{x,y, λ-+, igual que antes si
tuviéramos más restricciones pondríamos todos los lambdas que
hubiera
ii. Y ahora obtenemos los puntos candidatos a óptimos, eliminando los
que tengan números irracionales (que tengan una “i”):
Solve[grlag=={0,0,0},{x,y, λ-+//N
iii. Por último antes de pasar a las condiciones de segundo orden,
debemos comprobar que sea de rango uno el punto:
gra1=gradiente[a,{b}]/.{c}
1. A = restriccion
2. B = variables que haya en la restriccion
3. El punto que queramos comprobar SIN LAMBDA
iv. Y hacemos el rango: rango[{gra1}]
c. Cuando tengamos los puntos que tengan rango uno, pasamos a la condición
de segundo orden, donde calculamos la hessiana reducida y vemos su signo. Si
es definida positiva el punto es mínimo local; si es definida negativa es máximo
local. En otros casos, construimos la matriz orlada y vemos el signo de “r”,
clasificando según los signos obtenidos la forma cuadrática restringida.
i. Hacemos la hessiana de la función de Lagrange pero únicamente con
las variables x e y; he=hessiana[lag,{x,y}]/.{punto}
ii. Ahora, buscaremos los valores propios con Eigenvalues;
Eigenvalues[he]//N