domingo, 13 de marzo de 2016

Programación en la ingeniería


Programación en Ingeniería


Nuestro primer ejemplo en programación de computadoras involucra la evaluación de formulas matemáticas. Escribiremos y ejecutaremos programas en Python, trabajando con variables, como realizar cálculos de funciones matemáticas como ser $e^x$ y $seno(x)$, y usar Python para calculos interactivos.
Asumimos que tienes conocimientos básicos con el uso de computadoras como ser manejo de archivos y carpetas.
Nuestro primer programa: Una formula
La Linea de comando o shell, que la mayoria de los sistemas pone a nuestro alcance es una poderosa y transparente interface entre el usuario y lo interno de una computadora. en sistemas Windows, GNU/Linux, Unix, IOS entre otros. En el momento de de instalar Python( en el sistema Windows ), tambien se instala una aplicación llamada IDLE, el cual es un ambiente de desarrollo integrado, parecido al interprete de comandos, pero mas enriquecido para hacer uso de Python. Abrimos la aplicación IDLE y nos mostrara la siguiente ventana:

Situandonos en el sector del simbolo >>>( conocido como prompt: carácter o conjunto de caracteres que se muestran en la línea de comandos para indicar que está a la espera de ordenes), podemos ejecutar instrucciones Python.

Idle python 3

Un simple ejercicio podria ser el siguiente:

>>> from math import *
>>> w = 90
>>> sin(w)

0.8939966636005579 #resultado

La primera línea nos permite tener acceso a sin, cos, etc. La siguiente línea define una variable w en el cual asignamos el valor de 90, que es usada en computacion como lineas de procedimientos. las instrucciones ingresadas por nosotros estan descritas luego del simbolo ">>>", los resultados sin el simbolo.

Hola Mundo estilo matemático con introducción de dato


Una forma no muy peculiar de un Hola mundo a nuestro estilo, seria el siguiente:

Para efectuar este ejercicio, debemos crear un archivo llamado HolaMundo.py, con el siguiente contenido (obviar la numeración de la parte izquierda):
import sys, math
r = float(sys.argv[1])
s = math.sin(r)
print(" Hola Mundo, el resultado es: " + str(s))

Para ejecutar nuestro ejemplo, tendremos que ejecutar la consola de comandos de nuestro sistema, luego ingresar en la carpeta donde esta situado nuestro archivo y ejecutar la siguiente instrucción:

python HolaMundo.py 90

Obteniendo como resultado: Hola mundo, el resultado es: 0.893996663601

Explicación del programa:

import sys, math
La primera parte del código realiza una importación de las herramientas a utilizar, Python dispone de muchas librerias(Herramientas) estandares para realizar otro tipo de acciones.

r = float(sys.argv[1])
r es una variable, en el cual se otorga una variable del tipo float que es otorgada mediante el argumento en la posición 1, la libreria sys nos permite entre otras cosas, poder hacer capturas de los argumentos pasados mediante ejecución de instrucciones por consola

s = math.sin(r)
asigna a la variable s, el cual contiene el resultado de la expresion seno de el valor de r.

print(" Hola Mundo, el resultado es: " + str(s)), imprime la linea del mensaje. str(s), realiza la conversion de la variable de tipo float al tipo de variable string, ya que print, solo permite realizar impresiones en pantalla del tipo string.

Nuestra primera formula sera enfocado al movimiento vertical de una esfera en el aire. Por la segunda ley de Newton el modelo matemático para el movimiento de un balón y encontrar su posición vertical (variable y), varia con el tiempo(variable t), acordamos la siguiente formula:
$$y(t)=v_0t-\frac{1}{2}gt^2$$ Donde $v_0$ es la velocidad inicial del balon, g es la aceleración de la gravedad, y t es el tiempo. Obeservamos que el eje y es tomado como el inicio del balón, entonces y=0 cuando t=0.
Para obtener el tiempo en que toma el balón en ir y volver, tenemos que considerer y=0, podemos dar solucion con la formula cuando y=0:
$$V_0t-\frac{1}{2}gt^2=t(v_0-\frac{1}{2}gt)=0 : t=0 o t=2v_0/g$$
El ballon retorna despues de $2frac{v_0,g}$ segundos, ademas que una restriccion interesante para t e[0, 2vo/g] Usando
Evaluación de la siguiente expresión aritmética: $$y=5*0.6-\frac{1}{2}*9.81*0.6^2$$

Teniendo instalado Python de manera correcta, podemos hacer uso de la consola interactiva para ir probando algunas operaciones, presionamos las teclas Windows + r, escribimos cmd y presionamos enter, enseguida nos aparecera una ventana en modo consola, escribimos python y presionamos enter, ya estamos listos para realizar la práctica.

Considerando que en Python la notación de exponenciación se lo realiza con doble asterisco "**".
print(5*0.6-0.5*9.81*0.6**2)


Resultado(Correcto): 1.2342
print(5*0.6-(1/2)*9.81*0.6**2)

Resultado(Incorrecto): 3.0

Ejecución de un programa

Guardamos el texto anterior:

print 5*0.6-0.5*9.81*0.6**2

en el archivo primerPrograma.py

Para ejecutarlo seria del siguiente modo: python primerPrograma.py

Usando variables


La mayoria de los lenguajes de programación incluyendo Python hacen uso de variables similares a las empleadas en matemáticas.
Cuando evaluamos la enterior función $y(t)$, lo hicimos con valores fijos; Realizar cambios consecutivos para realizar diferentes cálculos sería un tarea tediosa y a la vez expuesta a errores, entonces podriamos facilitar el cálculo para otros parámetros haciendo el uso de variables. Para este acometido podemos hacer uso de las variables $v_0$(forma declarativa v0), $g$(forma declarativa g), $t$(forma declarativa t)y $y$(forma declarativa y)inicializada formalmente con la expresión empleando las tres variables anteriores.
Como alternativa usando variables en nuestro programa seria:
 v0 = 5
 g = 9.81
 t = 0.6
 y = v0*t - 0.5*g*t**2
 print(y)

Tenemos que tener consideración que en Python los nombres de variables pueden contener cualquier letra ya sea en minuscula o mayuscula, cualquier numero del 0 al 9 e incluso underscore(_), la primera letra de toda variable no puede ser un número. Python, realiza una distincion referente a las minusculas y mayusculas; es por esto que la variable x es diferente a la variable X.
Como ejemplo de variables alternativas en el caso anterior tenemos:

 velocidad_inicial = 5
 aceleracioDeLaGravedad = 9.81
 TIEMPO = 0.6
 PosicionVerticalDelBalon = velocidad_inicial*TIEMPO - 0.5*aceleracionDeLaGravedad*TIEMPO**2
 print(PosicionVerticalDelBalon)

El uso de variables con nombres mas descriptivos, dara simplicidad a las expresiones matemáticas, a medida que estas expresiones van creciendo podriamos presentar problemas de legibilidad, entonces podemos hacer un recorte en el código utilizando barra invertida (\).

Uso indiscriminado en nombres de variables

Ciertamente estamos obligados a respetar las posibles nomenclaturas para nuestras variables, como se aclaro anteriormente(La primera letra de las variables no pueden ser números y solo pueden ser letras o underscore).

Además de estas restricciones, Python hace uso de ciertas palabras reservadas. Estas palabras reservadas no pueden ser usadas como nombres de variables, entre ellas tenemos: and , as , assert , break , class , continue , def , del , elif , else , except , False , finally , for , from , global , if , import , in , is , lambda , None , nonlocal , not , or , pass , raise , return , True , try , with , while , y yield
Tomemos en cuenta que cualquier uso de estos nombres de variables nos darian un error en programación(obviamente en Python). podriamos considerar el uso de estas variables, aumentando un underscore al final del nombre, pero esa práctica no es aconsejable por diversos motivos, por ahora nos abstendremos de usarlos en nuestros programas.

Comentarios

A lo largo de las declaraciones de un programa, nos resultaria de gran utilidad acompañar algunos comentarios, ya sean aclarativos o de indicaciones, Los comentarios en Python inician con el caracter $#$, y todos los demas caracteres en la linea serán ignorados cuando el programa se ejecute. un ejemplo aclaratorio de comentarios es el siguiente:

 v0 = 5 # velocidad inicial
 g = 9.81 # aceleracion de la gravedad
 t = 0.6 # tiempo
 y = v0*t - 0.5*g*t**2 # posicion vertical
 print(y) # imprimimos el resultado

Dando formato a números y textos

En vez de tener un número como resultado de un cálculo, podriamos tener algo mas informativo. en este caso una forma mas explicativa seria:
 Con t=0.6 s, la altura del balon es de 1.23 m.


Vemos que esta forma es mas entendible para la mayoria de los usuarios, en python tendriamos que realizarlo de la siguiente manera:
 print("con t=%g s, la altura del balon es de %.2f m." % (t, y))


con lo cual Python nos imprimirá el contenido encerrado entre los caracteres '' ó "", El detalle a tomar consideracion son %g y %.2f , campos donde las variables serán introducidas de manera correcta. donde g nos permitira desplegar un número de la manera mas corta posible y .2f nos permite desplegar un número con dos decimales despues del punto.
La representación completa de nuestro programa entonces seria:

 v0 = 5
 g = 9.81
 t = 0.6
 y = v0*t - 0.5*g*t**2
 print("con t=%g s, la altura del balon es de %.2f m." % (t, y))

Una lista importante a tomar en consideración para los siguientes formatos es:
%s      un caracter
%d      un número entero
%0xd    un número entero con x cantidad de ceros a la izquierda
%f      notación decimal con seis decimales
%e      notación científica compacta, con letra e en el exponente
%E      notación científica compacta, con letra E en el exponente
%g      decimal compacto o notación científica (con e)
%G      decimal compacto o notación científica (con E)

Otra fórmula, conversion de Farenheit a Celsius


En nuestro siguiente ejercicio implica la conversion de la medida temperatura dada en Farenheit en su respoectivo equivalente a Celcius.
Dada la siguiente ecuación:

$$C=\frac{5}{9}(F-32)$$
En esta formula la variable C contiene el valor de grados en Centígrados y F el valor de grados en Farenheit.
 F = 21
 C = (5/9)*(F-32)
 print(C)

Usando la función Root

Problema: considerando el movimiento vertical del balón, ahora nos hacemos la siguiente pregunta: ¿Cuanto tiempo demora el balón para alcanza la altura $y_c$?, la respuesta es sencilla, cuando $y=y_c$ tenemos.
$$y_c=v_0-\frac{1}{2}gt^2$$ Reconocemos que esa ecuación es una acuación cuadrática que deberia resolverse con respecto a t.
$$\frac{1}{2}gt^2-v_0t+y_c=0$$ Usando ya las formulas bien conocidas para obtener las dos soluciones de la ecuación, encontrandolas así:
$$t_1=\frac{v_0-\sqrt{v_0^2-2gy_c}}{g}, t_2=\frac{v_0+\sqrt{v_0^2-2gy_c}}{g}$$

Objetos en Python

Cuando realizamos la siguiente instrucción:

F = 21


En realidad lo que realizamos es la creación del Objeto de tipo entero manteniendo el valor 21, La variable F actúa como un nombre para ese objeto entero. De la misma manera si realizamos:

C = 32.0


Python reconoce 32.0 como un número real entonces crea un objeto con nombre C del tipo float, conteniendo el valor 32.0, de hecho hemos realizado la creación de objetos y la asignación inmediata de los valores que contendran( Las asignaciones se realizan de derecha a izquierda ).
Existen una gran cantidad de diferentes objetos tipos en Python, además también nosotros podemos crear a nuestra manera objetos personificados.
Un ejemplo común del objeto str( "String", Cadena de caracteres ):

s = "Un texto que contiene un integer %d y un float %f" % (2, 2.0)
print(s)


Podemos ver que asignamos un cadena de caracteres a la variable s, el cual vendria a ser un objeto del tipo str.
seguidamente ejecutamos la función print, pasandole como parámetro nuestra variable objeto de tipo str s.
Teniendo como resultado:

Un texto que contiene un integer 2 y un float 2.000000

Evitando la división entera


Como regla de oro, deberias evitar la realización de divisiones enteras en Python, hay muchas maneras de poder realizar esto. podemos obligar a que la división comprenda de por lo menos un elemento del tipo float, también podemos obligar la transformación de un tipo entero a un tipo float, como veremos en el siguiente ejemplo:

F = ( 9.0 / 5 )*C + 32
F = ( 9 / 5.0 )*C + 32
F = ( 9 / 5 )*float(C) + 32


Explicación en lineas:
  1. Podemos ver que el numerador en la fracción es de tipo float.
  2. El denominador en la fracción es de tipo float.
  3. La variable de tipo C, se transforma a una variable de tipo float; El resultado es erroneo ya que la division se efectúa primero dando como resultado 1

Usando más funciones matemáticas


Nuestro siguiente ejemplo hace uso de algunas funciones matemáticas del módulo Math de la libreria estandar de Python. vemos la definición de la función seno hiperbólico de un número real x, designado como sinh(x) mediante la ecuación:

$$\sinh(x)=\frac{1}{2}(e^x-e^{-x})$$ Podemos evaluar sinh(x) de tres formas
from math import sinh, exp, e, pi
x = 2*pi
r1 = sinh(x)
r2 = 0.5*(exp(x) - exp(-x))
r3 = 0.5*(e**x - e**(-x))
print r1, r2, r3


No hay comentarios :