Subido por Lucky Olivet

pdfcoffee.com python-para-ingenieros-civilespdf-2-pdf-free

Anuncio
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
CONTENIDO
1. Introducción a Python
1.1 Breve historia de Python
1.2 Instalación de Python v. 3.7.x
1.3 Uso del intérprete
1.4 Ayudas
2. Variables y su referenciación
2.1 Tipos de variables
2.2 Referenciación vs. Asignación
2.3 Expresiones matemáticas
2.4 Funciones y biblioteca math
3. Entrada de datos y estructuras condicionales
3.1 Instrucciones print() e input()
3.2 Operadores booleanos e instrucciones if y else
4. Circuitos
4.1 Instrucción for
4.2 Instrucción while
5. Estructuras de datos
5.1 Arreglos
5.2 Listas
1
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
5.3 Tuplas
5.4 Matrices
5.5 Diccionarios
6. Procedimientos, funciones y archivos externos
6.1 Procedimientos y funciones
6.2 Archivos secuenciales
7. Interfaces gráficas de usuario con EasyGUI
7.1 Instalación de EasyGUI
7.2 Uso de elementos GUI con EasyGUI
7.3 Aplicación con GUI
8. Aplicaciones en ingeniería civil
Aplicación 1. Avión vs. Misil
Aplicación 2. Problema SI-NO
Aplicación 3. Problema trigonométrico
Aplicación 4. Problema de mínimos cuadrados
Aplicación 5. Raíz cuadrada por el método iterativo
Aplicación 6. Solución de un sistema de ecuaciones lineales por eliminación gaussiana
Aplicación 7. Propiedades geométricas de una sección plana
Aplicación 8. Menú de opciones para una aplicación
Aplicación 9. Ensaye AASHTO
Aplicación 10. Ensaye de penetración estándar SPT
Aplicación 11. Granulometría de los suelos
Aplicación 12. VRS vs. CBR
9. Problemas propuestos
Problema 1. Cálculo de la raíz cúbica por fórmula iterativa
Problema 2. Raíz cuadrada con otro método iterativo
Problema 3. Sucesiones
Problema 4. Logaritmo de X
Problema 5. Interpolación de Lagrange
Problema 6. Parábola de mínimos cuadrados
2
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
1. INTRODUCCIÓN A PYTHON
1.1 Breve historia de Python
Python es un lenguaje multi-paradigma y multi-plataforma creado por Guido Van Rosum en
Holanda en 1986 y que fuertemente se ha convertido en un lenguaje muy utilizado en el mundo,
debido a la reutilización del código, a una sintaxis poco compleja, a la generación de diversas bibliotecas para resolver cualquier problema de científico o de ingeniería, a su uso en diversos ambientes
operativos y a su implementación con diferentes paradigmas de programación reconocidos en el desarrollo de aplicaciones: estructurado, orientado a objetos, funcional, lineal.
Se recomienda visitar el blog http://python-para-impacientes.blogspot.com, el cual contiene diversos
tutoriales, información fundamental para comenzar a programar, para el manejo de bibliotecas y aplicaciones de terceros, instrucciones para la instalación de utilerías e información para el aprendizaje
de herramientas desarrolladas por terceros.
3
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
1.2 Instalación de Python v. 3.7.x
Se recomienda descargar la última versión para el sistema operativo Windows, haciendo clic en el
botón Python 3.7.x.
4
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
1.3 Uso del intérprete
Cuando se ejecuta Python 3.7.x se abre la siguiente pantalla, figura 1, que es el Shell o intérprete que
se va a encargar de transformar las instrucciones escritas en el editor para procesarlas, detectar e
indicar errores y mostrar la ejecución del programa (run).
Figura 1. Shell o intérprete de Python 3.7.0
Mientras se encuentra uno en el Shell, se puede interactuar con el lenguaje escribiendo directamente
en el cursor (>>>) y observar los resultados mostrados.
Para crear un programa usando el Python’s IDLE (Integrated Development and Learning Environment), se recurre a File-New file y se abre la ventana de edición para comenzar a escribir las instrucciones, como se observa en la figura 2.
5
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 2. IDLE
La ventana que se muestra dentro del IDLE se invocó mediante Help-About IDLE, y se puede observar la información de la licencia (License), derechos de autor (Copyright), el archivo Leeme (Readme),
noticias (News) y los créditos (Credits) tanto para Python, Tk y IDLE.
6
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
1.4 Ayudas
Toda la información de ayuda que se requiera para el IDLE, el mismo lenguaje, etc., puede ser accesado desde Help-IDLE Help, Help-Python Docs F1, como se observa en la figura 3.
Figura 3. Invocado de la ayuda
También se puede encontrar bastante documentación (en inglés) en la página de Python
(www.python.org) en Documentation.
Existen muy buenos libros comerciales (ver figura 4) y algunos disponibles en internet de forma
gratuita, y otros impresos, recomendando los siguientes:
1. Resolución de problemas para ingenieros con Python® estructurado de Rosalía Peña de Garceta
Grupo Editorial (2016) <Impreso>.
2. Learning Python de Fabrizio Romano de Pack Publishing (2015) <Gratuito y PDF>
3. Python for Everybody «Exploring Data Using Python 3» de Charles Severance (2016) <Gratuito y
PDF>
4. Python 3 al descubierto de Arturo Fernández Montoro de Alfaomega (2012) <Impreso>
Figura 4. Material bibliográfico de referencia
7
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
2. VARIABLES Y SU REFERENCIACION
2.1 Tipos de variables
En programación, una variable es un identificador (nombre) que se referencia a un lugar en la
memoria RAM de la computadora para almacenar un valor; El identificador es el nombre que el
programador escoge para la variable respetando las reglas del lenguaje; en Python, el nombre de la
variable debe empezar con una letra, puede ser un conjunto de hasta 256 caracteres combinados de
letras, números y algunos caracteres especiales que no sean usados dentro de la sintaxis del lenguaje
(_ «guión bajo», por ejemplo). El identificador es sensible a mayúsculas y minúsculas (case sensitive),
lo que significa que una variable identificada con mayúsculas es diferente de otra con el mismo nombre, pero escrito en minúsculas, por ejemplo, RADIO es diferente de radio y de Radio o de RaDio. El
nombre seleccionado para la variable debe ser acorde al contexto de lo que almacenará y respetarse
durante toda la escritura del programa. Por ejemplo, si se requiere calcular el área de un trapecio,
donde se han referenciado previamente los lados del mismo, el identificador puede ser el siguiente:
AreaTrapecio = (BaseMayor+BaseMenor)*Altura/2; más adelante se comentará sobre la forma de
escribir las expresiones matemáticas mediante los operadores aritméticos y funciones matemáticas.
Si una variable no se identifica previamente y se usa en una expresión, causará un error al
interpretar el Shell de Python al programa. En el ejemplo anterior, si a Altura no se le definió un valor,
el intérprete causará error al intentar cargar en memoria a AreaTrapecio. Algunas palabras reservadas
no pueden ser usadas como nombre de variables, por ejemplo, lambda es una palabra reservada en
Python.
El valor o valores que puede almacenar una variable pueden ser de tipo numérico (number),
carácter (string), lógico (booleano) o combinado. El tipo numérico puede ser entero (int) o flotante
(float); sin necesidad de definir el tipo, Python lo sabe automáticamente, diferenciando int de float
por el punto decimal (.)
La sintaxis para referenciar una variable es: variable=expresion, donde expresión puede ser
una constante, una variable, una función, cualquier conjunto de constantes, variables, funciones o
expresiones combinados con los operadores propios de su tipo y siguiendo las reglas adecuadas de
sintaxis (Peña, 2016).
Algunos ejemplos de variables y expresiones, relacionados con el diseño de elementos de
concreto reforzado, según NTC-2017:
fbiprima_c=0.85*fprima_c
p_min=0.7*math.sqrt(fprima_c)/fy
p_bal=fbiprima_c/fy*beta1*6000/(6000+fy)
p_max=0.75*p_bal
FR_flx=0.90
MR=FR_flx*fbiprima_c*base*peralte**2*q*(1-0.50*q)
Los operadores matemáticos y funciones los vamos a comentar más adelante. Obsérvese que
en la raíz cuadrada usamos math.sqrt().
8
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
2.2 Referenciación vs. Asignación
Una referenciación no es una expresión matemática; solo indica un proceso de lectura/escritura en memoria. El intérprete consulta el valor de los datos referenciados por las variables a la derecha del signo igual, realiza las operaciones indicadas en la expresión, busca el resultado en memoria,
lo crea si este no estaba y hace que la variable de la izquierda del signo igual apunte hacia dicho dato
(escribe en la variable la posición del dato). Si existía la variable de la izquierda la modifica. Si no
existía, la crea. Si tras el proceso de referenciación de una variable, el dato al que apuntaba anteriormente queda inaccesible (ninguna otra variable lo apunta), el recolector de basura lo elimina, liberando la zona de memoria que ocupaba. (Peña, 2016)
Una variable en Python es un identificador que referencia a una posición de memoria. Puesto
que una posición puede estar apuntada por varios identificadores, podemos considerarlos alias, es
decir, pseudónimos.
La función id() proporciona la posición de memoria del objeto al que referencia la variable
indicada como argumento de la función. La posición de memoria que se asigne depende de los programas en ejecución en el momento de arrancar el entorno Python y de lo que se haya realizado en
Python con anterioridad.
La función type() indica el tipo de la constante, variable o expresión que se quiera consultar.
Figura 4. Ejemplos de id() y type()
La figura 4 muestra algunos ejemplos del uso de id() y type() ejecutados directamente en el
Shell.
9
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
2.3 Expresiones matemáticas
Una expresión matemática en un lenguaje de programación requiere de operadores, variables
y funciones para indicar la operación de sus componentes y generar un resultado numérico que se
almacenará en la memoria a través de la variable referenciada.
Los operadores aritméticos como suma (a+b), resta (a-b), multiplicación (a*b), división real
(a/b) y elevar a una potencia (a**b) están disponibles en todos los lenguajes, y Python no es la excepción; sin embargo, existen otros operadores de uso no cotidiano que están disponibles en el lenguaje: división entera (a//b), resto de la división entera o módulo (a%b); para modificar la jerarquía
de las operaciones (también llamado precedencia, prelación o prioridad) ímplicita en el lenguaje,
sólo se usan los paréntesis () como signos de agrupación.
La precedencia de las operaciones numéricas se muestra en la tabla no. 1.
Tabla 1. Orden de precedencia de las operaciones en Python.
Precedencia
Operación
Resultado
1
-x
Cambio de signo
1
+x
Operador identidad (no hace nada)
2
x+y
Suma x e y
2
x-y
Resta de y a x
3
x*y
Multiplica x por y
3
x/y
División real
3
x//y
División entera
3
x%y
Resto de la división entera de x/y
4
x**y=pow(x,y)
Elevación de x a la y
5
(expresión)
Paréntesis: fuerza el orden de ejecución
Se recomienda poner solo los paréntesis necesarios en las expresiones, pero en operaciones
complejas, los paréntesis aumentan legibilidad.
Tanto el conjunto de los números enteros como el de los reales, (float), en matemáticas pueden
ir desde -∞ a +∞. Además, mientras que para cualquier entero existe un anterior y un siguiente, entre
dos reales cualesquiera existen infinitos números reales. La implementación completa del tipo float
en Python depende del sistema operativo sobre el que trabaja el Shell. Generalmente está representado
en 8 bytes, con un rango de valores que va desde 1.7x10 -308 a 1.7x10+308, para un sistema operativo
Windows de 64 bits. En caso de presentarse un desbordamiento, el lenguaje mostrará una salida inf
(infinite). La representación de un flotante en formato de notación científica sustituye el «x10 x» por
«ex». Algunos ejemplos se muestran en la figura 5 ejecutados en el Shell.
10
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 5. Ejemplos de operaciones en el Shell.
En una de las entradas (la séptima) puede observarse que al pedirse el resultado de pi/2, donde
pi=3.141592657, y se invoca mediante la biblioteca (library) math, se presenta un error al no haberse
invocado primero usando la instrucción import, misma que más adelante la estudiaremos.
11
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
2.4 Funciones y biblioteca math
Una función es un objeto con un nombre reservado que permite obtener un valor numérico de
uno o varios parámetros encerrados dentro de paréntesis; por ejemplo, las funciones trigonométricas
seno, coseno, tangente son definidas mediante las funciones sin(), cos() y tan(), cuyo parámetro que
requieren es el valor de un ángulo expresado en radianes. Para ocupar estas funciones, se requiere,
primero, importarlas de la biblioteca math, pues es un archivo externo de extensión .py alojado en la
carpeta de instalación de Python y estará disponible en el Shell cuando sea invocado. Su llamado o
invocado se puede dar de las siguientes formas: import math, import math as m, from math import
sin.
La primera forma llama a la biblioteca math y pone disponible todas las funciones en memoria
siempre y cuando se llamen anteponiendo math al nombre de la función, por ejemplo,
math.sin(math.pi/4) regresa el flotante 0.7071067811865475. La segunda forma es similar a la anterior pero usa el alias m para anteponerse en el nombre de la función, por ejemplo, m.sin(m.pi/2)=1.0.
La tercera forma pone sólo disponible en memoria a la función que se importa, por ejemplo,
sin(45*180/math.pi)=0.7071067811865475, solo dará este resultado si se ha importado la biblioteca
math previamente, si no mostrará un mensaje de error. Algunas funciones se muestran en la tabla no.
2.
Tabla 2. Algunas funciones disponibles de la biblioteca math.
Función
Ejemplo
Resultado
COMENTARIO
sqrt(a)
math.sqrt(4)
2.0
Raíz cuadrada
sin(a)
math.sin(0)
0.0
Seno del ángulo a
cos(a)
math.cos(0)
1.0
Coseno del ángulo a
tan(a)
math.tan(45*math.pi/180)
1.0
Tangente del ángulo a
pi
math.pi
3.141592653589793
π
asin(r)
math.asin(1)
1.5707963267948966
Arco seno de la relación r
acos(r)
math.acos(0)
1.5707963267948966
Arco coseno de la relación r
atan(r)
math.atan(1)
0.7853981633974483
Arco tangente de la relacion r
log(x)
math.log(1.5)
0.4054651081081644
Logaritmo base e de x
log(x,b)
math.log(1.5,2)
0.5849625007211562
Logaritmo base b de x
log10(x)
math.log10(1.5)
0.17609125905568124
Logaritmo decimal o base 10
exp(x)
math.exp(1)
2.71828182845904
Constante de Euler o número e
factorial(n)
math.factorial(5)
120
Factorial de n
ceil(f)
math.ceil(5.68)
6
Próximo entero
floor(f)
math.floor(5.68)
5
Entero anterior
hypot(x,y)
math.hypot(3,4)
5.0
Hipotenusa de x e y
Existen otras funciones disponibles sin recurrir a la biblioteca math como abs(), round(), int()
que permiten efectuar operaciones sobre números para encontrar el valor absoluto, redondear a las
cifras decimales que se indiquen y hallar la parte entera de un número decimal.
Existen otras bibliotecas que deberán ser llamadas en el momento que se deseen usar en la
escritura de un programa; algunas están colocadas en la carpeta lib que se generó al instalar Python
3.7.0. Otras bibliotecas creadas por terceros deberán descargadas e instaladas con el paquete de instalación de Python (Python Install Packing) o comando pip desde la línea de comandos.
12
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
3. ENTRADA DE DATOS Y ESTRUCTURAS CONDICIONALES
3.1 Instrucciones print () e input()
Un paradigma de programación muy elemental y que permite crear programas de forma muy
sencilla, sin necesidad de estructurar un diagrama de flujo complejo o elaborar un algoritmo complicado, es la programación secuencial, la cual se basa en tres bloques básicos (ver figura 6):
Lectura >>> Proceso >>>Salida
o esquemáticamente:
Figura 6. Proceso secuencial
Lo importante es establecer cuáles son las variables que deberán estar en el bloque de lectura
de datos iniciales, cuáles en el proceso mediante nuevas variables y sus expresiones, y cuáles en el
bloque de salida de resultados.
La lectura de variables de entrada las realizaremos mediante la referenciación con la instrucción input(), cuya sintaxis simple es: variable=input("mensaje"); después del mensaje, formado por
una cadena de texto (string), el valor se referencía a la variable al introducirlo desde el teclado; la
variable referenciada es de tipo string y se deberá convertir a número, si así se necesita, mediante la
función eval() o específicamente para volverlo número flotante con float().
Para mostrar los resultados calculados en el proceso mediante expresiones referenciadas a
nuevas variables, se utiliza la instrucción print(), misma que se utiliza respetando la siguiente sintaxis
simple: print("rótulo {:formato}".format(variable1),...). La variable1 puede ser representada con un
formato mediante la función format() para ajustar su representación de salida mediante un dato tipo
conjunto {} dentro de una cadena de texto. El rótulo es el texto que se asocie al resultado de la variable
para que el usuario sepa que obtiene el programa.
Veamos el siguiente ejemplo: para calcular las raíces de una ecuación cuadrática de la forma
, se utiliza la fórmula general, cuyas expresiones matemáticas son:
En este problema, identificamos a los coeficientes A, B y C como los datos de entrada, a x1 y
x2 como las variables referenciadas en el proceso mediante sus expresiones respectivas, y a las mismas para mostrar los resultados en el bloque de salida.
El programa y su corrida (run) en Python 3.7.0 se muestra en la figura 7.
13
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 7. Programa y corrida para raíces de una ecuación cuadrática
En el programa anterior se observa al inicio el uso de las comillas triples (""") para documentar,
tanto al programador como al futuro usuario del programa. Es recomendable usar esta técnica y, además, realizar comentarios con el símbolo #. Una variante del programa con la salida formateada y
comentarios, sería la que se muestra en la figura 8.
Figura 8. Programa EcuacionCuadratica.py modificado con comentarios y formato
Mas adelante modificaremos este programa para que calcule las raíces reales e imaginarias
(raíces complejas) a través de la evaluación del discriminante
.
14
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
En mecánica de suelos, cuando se requieren determinar las volumetrías y gravimetrías de un
suelo experimentado en el laboratorio mediante sus pesos en aire, en aire con parafina y en agua con
parafina de una muestra cúbica inalterada, de la cual se conoce su humedad w y su densidad de sólidos
Gs así como la densidad de la parafina dp, se sigue un procedimiento de cálculo para obtener los
parámetros básicos, que son: la relación de vacíos (es), la porosidad (ns) y el grado de saturación (Ss).
A continuación, se presenta el modelo en Mathcad 14 para resolver este problema; elaborar el programa en Python; los resultados deberán mostrar las unidades de las variables, ver figura 9.
15
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 9. Relaciones volumétricas y gravimétricas modeladas en Mathcad
El programa se muestra en la figura 10.
Figura 10. Programa Volumetrías y Gravimetrías
16
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
La ejecución del programa se ve en la figura 11.
Figura 11. Ejecución del programa Volumetrías y Gravimetrías
Como se puede ver, en este programa se utiliza la función eval() en lugar de float() y prácticamente se obtienen resultados similares. Si no se utilizan estas funciones antes de referenciar a la
variable introduciendo los datos desde el teclado mediante input(), se carga un valor textual a las
variables y no se pueden realizar las operaciones matemáticas.
Como ejercicio, se deberá modificar el programa anterior para que les solicite el lugar de
donde se obtiene la muestra y, además, muestre los resultados de los pesos volumétricos del suelo en
estado natural y en estado seco, los volúmenes de sólidos, agua y aire, con sus respectivas unidades.
Realizar un programa que determine la humedad de un suelo calculado con el método del
horno de convección eléctrica, en donde se solicita el peso de la cápsula (tara, en grs), el peso de la
cápsula más suelo húmedo (en grs) y el peso de la cápsula más suelo seco (en grs) después de secado
en el horno durante 24 horas a 60°C. La humedad del suelo se calcula con la expresión:
Ejemplo, tomado de un modelo de Mathcad 14, ver figura 12:
Figura 12. Cálculo de la humedad de un suelo
17
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
3.2 Operadores booleanos y estructuras if y else
En un diagrama de flujo, dentro del bloque de procesos, hay ocasiones que se requiere tomar
un camino a partir de una bifurcación, o condición matemática, misma que requiere ser evaluada
mediante operadores lógicos (o booleanos, en honor de Alfred Boole). Esquemáticamente, se vería
representado como se muestra en la figura 13.
Figura 13. Bloque de condición
La evaluación de la condición solo tiene dos posibles respuestas: Si (True) o No (False). El
flujo del programa dependerá del valor booleano. Además, cuando se habla de operaciones lógicas,
existen los operadores de comparación: igual (==), mayor que (>), menor que (<), mayor o igual que
(>=), menor o igual que (<=), no es igual o diferente (!=); estos operadores tienen la misma jeraquía,
se evalúan de izquierda a derecha y son binarios por que requieren de dos valores para realizar la
comparación; existe un operador unitario que es la negación o not().
Si se requiere componer operaciones lógicas entre más de dos operaciones binarias, se utilizan
los operadores and (conjunción) y or (disyunción); estos operadores, y otros complementarios, existen a nivel de bits, pero no los utilizaremos en nuestra programación.
Si D≥0, tenemos soluciones reales, si no, soluciones complejas de la forma R±Zj, donde j2=1; para usar expresiones complejas, se requiere importar la biblioteca cmath antes de usarla en las
expresiones. Para evaluar la condición, se requiere de la instrucción if, cuya sintaxis es:
if condicion:
operaciones1 #si condicion es True
else:
operaciones2 #si condicion es False
En esta estructura, se requiere la identación o sangría para el bloque de operaciones1 debajo
de la instrucción if y de los dos puntos (:) para identificar el bloque y ejecutar operaciones1 si la
condición es True.
La instrucción else: es opcional, pero se recomienda colocar si se quiere controlar mejor el
flujo del programa para ejecutar el bloque de operaciones2; al igual que la instrucción if, se requieren
los dos puntos (:) y la identación (sangría). En algunos casos no será necesario utilizar la instrucción
else:, como veremos en algunos ejemplo más adelante.
En el ejemplo de la solución de la ecuación cuadrática, el valor de la discriminante conduce a
las soluciones reales o complejas:
.
Modificaremos el programa EcuacionCuadratica.py usando matemática compleja para que
muestre los resultados con el imaginario j; esta variable reservada sustituye a i2=-1 de la matemática
compleja tradicional, observando en la figura 14 el código fuente y su ejecución.
18
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 14. Programa fuente y ejecución de la fórmula general para ecuaciones cuadráticas
La ecuación de tercer grado a3x3+a2x2+a1x+a0=0 puede resolverse con las ecuaciones deducidas por Tartaglia y dadas a conocer por Cardano, que se resumen como el método de TartagliaCardano; la secuencia de operaciones requiere de conocer los coeficientes a0, a1, a2 y a3 como datos
de entrada; los resultados de x1, x2 y x3 requieren de la evaluación y comparación de un conjunto de
expresiones, como se muestra en el documento «Ecuaciones de tercer grado» de Wikilibros. Clic aquí
para acceder a la información.
El programa TartagliaCardano.py , ver figura 15, presenta las soluciones a la ecuación cúbica
efectuando las pruebas recomendadas en el documento. La corrida del programa para las siguientes
ecuaciones se muestra en la figura 16:
a) 54x3-81x2-18x+40=0
b) x3-3x2+3x-1=0
c) (x2-5)(2x+1/3)=0
d) (π+x)(π-x)(3x-π)=0
19
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
e) 4x3-5x2+10x-19=0
Figura 15. Programa para solucionar ecuaciones cúbicas por las fórmulas de Tartaglia-Cardano
20
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 16. Ejecución del programa TartagliaCardano.py
21
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
En el tema de clasificación de suelos y específicamente en los límites de consistencia o de
Atterberg de Mecánica de Suelos, cuando se requiere clasificar un suelo fino, se necesita localizar
una región en la carta de plasticidad de Casagrande (1948) para conocer la naturaleza del suelo a
partir del límite líquido (LL) y el índice plástico (IP). En 1977, Howard definió la línea U (IP=0.9LL8) y ASTM adoptó la nueva carta de plasticidad con la norma ASTM D-2487 (figura 17); Polidori
(2009) redefinió la carta de plasticidad, aunque no la ha adoptado aún ASTM (figura 18).
Figura 17. Carta de plasticidad modificada de Howard
Figura 18. Carta de plasticidad modificada por Polidori
A continuación, se muestra (figura 19) el programa en Python y su ejecución para clasificar el
suelo fino usando Polidori; a partir de la lectura de las variables LL e IP, y calculando las ecuaciones
de las rectas de la línea U (IP_U), línea 0.5C (IP_5C), línea C (IP_C) y la línea punteada (IC_puntos=0.55LL-11) así como LL>50, se determina la clasificación del suelo fino, mismo que se almacena
en la variable de tipo cadena o string referenciada como Suelo.
22
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 19. Programa fuente y ejecución de la carta de Polidori (2009)
23
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
4. CIRCUITOS
4.1 Instrucción for
Cuando en un programa se requiere repetir una serie de operaciones un número determinado
de veces, la instrucción for es la más recomendada para realizar tal acción. Su diagrama de flujo puede
representarse de la siguiente forma:
Figura 20. Bloque de circuito for
Normalmente se recurre a una variable iterativa que lleve el conteo de las repeticiones; cuando
se alcance el último valor de la iteración, se continua con el flujo del programa. Esta estructura también recibe el nombre de circuito, bucle o ciclo for.
Hay varias formas de realizar los circuitos, pero la forma más sencilla es utilizar una lista, que
es una variable especial que más adelante utilizaremos, pero que por el momento generaremos con la
función range(). Por ejemplo, la suma de los primeros n términos puede expresarse matemáticamente
como:
; si utilizamos una variable auxiliar para ir acumulando la suma de los
términos, llamada suma, referenciándole un valor inicial de cero y participando dentro del circuito,
obtendremos un algoritmo para representar dicha sumatoria. Por ejemplo, si n=10, la suma de 1 a 10
es igual a 55. La variable suma recibe el nombre de acumulador. Si la variable se utiliza sólo para
contar, como usaremos más adelante en la otra estructura repetitiva, recibe el nombre de contador. El
programa y su corrida se muestra en la figura 21.
Figura 21. Programa Suma.py
Puede observarse que la función range() genera una lista de 1 a 10, si se incrementa el último
número en 1; la variable k es la variable iterativa y se sustituye temporalmente por los valores de la
lista (de 1 a 10); el acumulador suma inicia con cero y va acumulando los valores de k. Como recomendación, cualquier sumatoria matemática puede representarse con un acumulador, un valor final
24
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
incrementado en uno y un circuito que acumule a la expresión a evaluar; en el siguiente ejemplo,
pueden verse los elementos comentados arriba tanto en la expresión abreviada (sumatoria), como en
su desarrollo y la representación en otras variantes, que conducen al mismo resultado, según se ve en
la figura 22. Su programa y corrida se muestran en la figura 23.
Figura 22. Representaciones de la sumatoria
Figura 23. Programa y corrida de Suma.py
Los circuitos for pueden anidarse, es decir, un bucle puede estar dentro de otro u otros bucles,
respetando la ejecución del más interno hacia el más externo. La siguiente expresión incorpora dos
sumatorias:
. Su programa y ejecución se muestra en la figura 11.
Figura 24. Programa y corrida de Suma2.py
25
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
4.2 Instrucción while
A diferencia de for, cuando en un programa se requiere repetir una serie de operaciones donde
se desconoce el número de veces, pero el control del ciclo depende de una condición, la instrucción
while es la más indicada para realizar tal bucle. Su diagrama de flujo puede observarse en la figura
25.
Figura 25. Bloque de circuito while
Normalmente se recurre a una variable de control que permita valorar la condición, para que
el circuito se realice mientras la condición es verdadera (True). Esta estructura también recibe el
nombre de circuito while, y se debe ser muy cuidadoso en la definición de la condición (o condiciones)
de la variable de control para que se pueda salir del circuito, porque se corre el riesgo de quedar en
un circuito infinito o generar un desbordamiento (inf).
Esta estructura es muy utilizada para repetir procesos o partes de un programa hasta que se
oprima determinada tecla o se establezca cierta condición. Por ejemplo, el programa EcuacionCuadratica.py puede modificarse para que se repita hasta que se oprima una tecla diferente de "S", de la
forma que se muestra en la figura 26.
Figura 26. Programa EcuacionCuadraticaWhile.py
En el programa anterior, la variable de control es tecla, es de tipo string y se introduce desde
el teclado. La condición de repetición es tecla=="S" or tecla=="s". Cuando se oprima una tecla
diferente, el circuito termina.
En ciertos problemas de métodos numéricos, se requiere determinar la raíz de una función no
polinómica, y el proceso debe repetirse hasta que se cumpla cierta condición de evaluación de la
función, por ejemplo, que se aproxime a un valor cercano a cero establecido por un número muy
pequeño. El método de la secante permite obtener mediante aproximaciones sucesivas a partir de la
evaluación de la recta secante que intercepta dos puntos sobre la curva, acercándose a la solución
26
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
mediante un proceso iterativo. El pseudo programa en Mathcad 14 mostrado en la figura 27 permite
visualizar el resultado la raíz de la función y(x)=exp(-x)-π, cuya gráfica se muestra ahí mismo.
Figura 27. Pseudo programa Secante.xmcd
El programa en Python y su corrida se muestran en la figura 28.
27
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 28. Programa MetodoSecante.py
Algunos ejemplos del uso de las dos instrucciones repetitivas se muestran en la figura 29.
El primero es para calcular el factorial de un número mediante la expresión:
Figura 29. Programa fuente y corrida del factorial de un número
En este programa puede observarse el uso de la función type() para verificar el tipo de variable,
el uso de f como variable para referenciar el producto de la variable iterativa i, n con un valor inicial
float para servir como variable de control en el segundo circuito while() y la función eval() para
evaluar el tipo de dato que se introduce desde el teclado con la instrucción input().
Así como se dijo que para una sumatoria se requiere un acumulador, para una multiplicatoria
se requiere una variable que registre el producto (multiplicador) en cada vuelta del circuito, como se
observa en el cálculo de la multiplicatoria de 1 a 10, ver figura 30, para su pseudo-programa en
28
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Mathcad 14 y el programa en Python.
Figura 30. Pseudo programa Mathcad y programa fuente de la multiplicatoria de un número
Para calcular las cifras decimales del número pi (π), existe una serie infinita propuesta por
James Gregory y Gottfried Leibniz expresada por la siguiente sumatoria; en este ejemplo se calcula
para un máximo de k = 1e6:
El programa en Python y su corrida se muestran en la figura 31.
29
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 31. Programa fuente y corrida del cálculo de 𝜋 con la fórmula de Gregory-Leibniz
5. ESTRUCTURAS DE DATOS
5.1 Arreglos
En programación, un arreglo (array) es una variable que permite almacenar más de un número
en una posición secuencial referenciado a un solo identificador. La posición puede ser en una dimensión, por lo que el arreglo recibe el nombre de arreglo unidimensional o vector. Si la posición se
refiere a dos dimensiones, fila y columna, el arreglo es bidimensional y se conoce como matriz. En
algunos lenguajes al vector se le conoce como lista y a la matriz como tabla.
La posición dentro del vector o matriz se llama mediante variables enteras, que en la matemática formal se conocen como subíndices; por ejemplo, Aj es una variable con subíndice entero j que
puede almacenar el número de datos que tome j, comenzando con cero (0). En pseudo programación,
la variable j es una variable de rango, y no forzosamente debe ser entera; pero si se usa como subíndice
de un arreglo, lo deberá ser.
Por ejemplo, si Aj, para j=0,1,2,..,10 va a almacenar los valores 0, 0.25, 0.50,
1.00, ... , 2.50, se representaría matemáticamente como: Aj=0.25*j y en pseudo programación se escribiría como se observa en el extremo derecho de este párrafo.
Puede verse que A almacena 11 datos numéricos tipo float, y en cada posición j,
el valor depende de la expresión 0.25*j.
Para llamar a un elemento de A; por ejemplo 0.75, vemos que su posición es 3,
por lo tanto, A3=0.75; así, podemos llamar a cualquier elemento de A con su subíndice,
siempre y cuando esté en el rango de 0 a 10.
Cuando el arreglo es bidimensional, por ejemplo, una matriz rectangular de 6 filas, 11 columnas, se identificaría con una variable y se requerirían dos subíndices para
indicar las filas y columnas; por ejemplo Xi,j=i/(j+1)+j/(i+1). En pseudo programación
se requerírian dos variables de rango, por ejemplo, i:=0,..,5 y j:=0,...,10. La representación gráfica de una matriz, en Mathcad 14, es una superficie de contorno o una curva
tridimensional como se observa en la figura 32.
30
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Un elemento de la matriz se puede llamar mediante los subíndices en el orden fila, columna separados
por una coma; por ejemplo, el elemento X3,5=-0.75.
Para trabajar este tipo de estructura de datos en Python, es necesario revisar las listas (list), tuplas
(tuple), lista de listas (matrix) y diccionarios (dict), así como algunas funciones especiales apropiadas
para el tratamiento de estas variables iterables.
5.2 Listas
Una lista es una colección ordenada de objetos, similar al array dinámico empleados en otros
lenguajes de programación. Puede contener diferentes tipos de objetos, es mutable y Python nos
ofrece una serie de funciones y métodos integrados para realizar diferentes tipos de operaciones.
(Fernández-Montoro, 2012).
La sintaxis de una lista es: identificador=[elemento0, elemento1, ...]; las listas son iterables y
mutables. Los valores de las listas pueden ser accedidos utilizando el valor del índice que ocupan en
la misma.
Algunos métodos más utilizados en el proceso de las listas son:
a) append(): para añadir e insertar un elemento al final de la lista.
b) insert(): inserta un elemento en la posición que indique el subíndice.
c) del(): borra un elemento de la lista indicado por el subíndice.
d) len(): devuelve el número de elementos de la lista.
e) remove(): elimina un elemento de la lista a través de su valor.
f) pop(): elimina un elemento indicado por el índice y devolviendo el elemento.
g) sort(): ordena la lista y quedará modificada.
h) sorted(): ordena la lista pero no la modifica. Puede usarse el argumento reverse para
ordenar de mayor a menor.
En el programa de la figura 33 se observa el uso de las funciones y métodos comentados.
Figura 32. Ejemplo de una matriz en Mathcad y su representación gráfica
31
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 33. Funciones y métodos de listas
El siguiente problema se deberá programar en Python: «Suponga que tenemos las coordenadas
de cinco puntos en el plano x, y. Nos interesa encontrar la distancia entre los dos puntos más distantes
entre sí. Los cinco puntos son: P1(-0.94, -3.22), P2(-4.02, 8.17), P3(7.07, -9.11), P4(5.49, 8.76),
P5(0.20, 4.45). Determinar la distancia entre los dos puntos más alejados. Asegúrese que ha comparado todas las posibilidades (10 en total).»
32
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 34. Programa y ejecución para determinar la distancia máxima entre coordenadas
Como se observa en el programa de la figura 34, se controlan los subíndices de los vectores x
e y mediante las variables i y j haciendo el recorrido de 0 a la longitud (len()) de x, en el caso de i, y
de i+1 a la longitud de y, en el caso de j. La distancia entre los puntos se calcula con
La función range() crea una lista de 0 a len(x): [0,1,2,3,4,5].
33
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
5.3 Tuplas
Una tupla (tuple) es una colección de objetos de diferentes tipos, usando internamente un array
de objetos que almacena referencias hacia otros objetos. Las tuplas se declaran con paréntesis (), entre
los cuales deben separarse por comas (,) los elementos que van a formar parte de ella. Los elementos
de las tuplas son accesibles a través del índice que ocupan en la misma, igual que en un array. Este
tipo de dato es inmutable, esto significa que no es posible asignar directamente un valor a través del
índice. Es posible anidar tuplas dentro de tuplas. La tupla es iterable, es decir, podemos recorrer todos
sus elementos con un ciclo for. Las tuplas se pueden concatenar a través del operador +; también
puede utilizarse el operador * para crear una tupla donde los elementos de la original se repiten el
número de veces que indique el número después del asterisco.
Los principales métodos que incluyen las tuplas son index() y count(); también puede usarse
la función len() sobre la variable referenciada a la tupla.
La sintaxis de una tupla es: identificador=(elemento0, elemento1, ...)
En la figura 35 se muestra el programa donde se observa el uso de las funciones y métodos
comentados:
Figura 35. Funciones y métodos sobre tuplas
34
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
5.4 Matrices
Una matriz (matrix) es un arreglo rectangular de números accedidos mediante sus subíndices
referidos a filas y columnas. En Python, una matriz es una lista de listas (list of list), y el tratamiento
que se debe dar durante su programación es similar al de las listas, solo teniendo cuidado de invocar
correctamente la posición de un número en la matriz a través de los subíndices, usando la notación
siguiente: Matriz[fila][columna]. Matriz es la variable que identifica al arreglo; fila es el subíndice
que indica la posición en las filas y columna el subíndice que posiciona en las columnas. Por ejemplo,
si A es una matriz cuadrada de 5 x 5 (cinco filas y cinco columnas) con los siguientes valores:
En Python, se crearía dicha matriz de la siguiente forma:
Para llamar al número 65 de la matriz, invocaríamos A[2][2], recordando que todas las listas
empiezan con un número en el subíndice 0, y en el caso de una matriz, en la fila 0 y columna 0. Así,
el número 12 está en A[0][0]; el elemento A[4][0] es 0 y el A[4][4] es 33.
Las matrices son muy utilizadas en ingeniería, y se han desarrollado fuertemente debido a su
programación en la solución de sistemas de ecuaciones lineales mediante la eliminación gaussiana;
esta técnica es generadora de otros métodos y sus aplicaciones en diversas áreas de la ingeniería civil
son notables. El programa está planteado para ingresar los coeficientes de un sistema de N ecuaciones
lineales y puede probarse con el sistema mostrado en la figura 36-a. El programa, que se muestra en
la figura 36-b, encuentra la solución de un sistema de ecuaciones lineales mediante una matriz aumentada, aplica eliminación gaussiana y sustitución hacia atrás para encontrar el vector de soluciones.
Figura 36-a. Modelo en Mathcad para solución de un sistema de ecuaciones lineales
35
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
36
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 36-b. Programa para resolver un sistema de ecuaciones lineales por eliminación gaussiana y sustitución hacia atrás
En el programa de la figura 36 se importó (from tabulate import tabulate as tab) una biblioteca
externa para mostrar en forma tabulada a la matriz (tabulate), la cual deberá ser descargada e instalada
en la ruta (path) de bibliotecas (library) mediante el comando pip ejecutado desde la línea de comandos, como se observa en la figura 37.
Figura 37. Instalación de la biblioteca externa tabulate desde la línea de comandos
En la ventana Path Browser podemos ver, figura 38, instalada la biblioteca externa tabulate:
Figura 38. Ventana Path Browser
37
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
5.5 Diccionarios
Un diccionario es un dato especial de Python que almacena una serie de valores utilizando
otros como referencia para su acceso y almacenamiento. Cada elemento de un diccionario es un par
clave-valor (key-value) donde el primero debe ser único y será usado para acceder al valor que contiene. A diferencia de las tuplas y las listas, los diccionarios no cuentan con un orden específico,
siendo el intérprete de Python el encargado de decidir el orden del almacenamiento. Sin embargo, un
diccionario es iterable, mutable y representa una colección de objetos que pueden ser de diferentes
tipos (Fernández-Montoro, 2014).
Para declarar un diccionario se utilizan las llaves ({}) entre los que se encuentran los pares
key-value separados por comas. La key de cada elemento aparece separada del correspondiente value
por el carácter dos puntos (:). Alternativamente, podemos hacer uso de la función dict() para crear un
diccionario.
A diferencia de las listas y tuplas, el acceso al valor de un elemento no es por índice sino por
la clave (key). Los métodos principales que nos permiten iterar sobre un diccionario son: items(),
values() y keys(). El primero da acceso tanto a claves como a valores, el segundo se encarga de devolver los valores y el último, las claves del diccionario. En la figura 39 se observa el programa que
usa un diccionario para buscar las funciones trigonométricas de un ángulo dado.
Figura 39. Uso de un diccionario para hallar las funciones trigonométricas de un ángulo dado
El siguiente programa, ver figura 40, toma el Zen de Python creado por Tim Peters, lo muestra
en inglés de la biblioteca importada this.py y permite traducir por línea (19 líneas) o en su totalidad.
Con la tecla <F> se termina el programa.
38
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 40. Programa Zen de Python
En el programa de la figura 40 se obsdrva el uso de un diccionario mediante la variable Zen;
para poder leer la línea del diccionario indicada en la variable n introducida desde el teclado mediante
input(), se utiliza una lista generada por comprensión con la función list().
39
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
6. PROCEDIMIENTOS Y ARCHIVOS EXTERNOS
6.1 Procedimientos y funciones
Un procedimiento es un conjunto de instrucciones definidas al inicio de un programa y que
pueden ser llamadas más de una vez durante la corrida del mismo. En la programación estructurada,
los procedimientos son los elementos básicos para desarrollar programas más funcionales. Al ser llamadas o invocadas varias veces, minimizan el código, aumentan la legibilidad y fomentan la reutilización de código. A diferencia de otros lenguajes, en Python, un procedimiento no existe hasta que
es invocado. Se usa la palabra reservada def para crear un procedimiento o definir una función, con
la diferencia que la segunda devuelve un valor; en los siguientes dos ejemplos se usan procedimientos
y funciones para entender su programación.
Para calcular los coeficientes binomiales del binomio de Newton (a+b)n se usa la expresión:
nCr=n!/((n-r)!r!)
Así, el desarrollo de (a+b)4 es a4+4a3b+6a2b2+4ab3+b4, donde los coeficientes 1, 4, 6, 4 y 1
se forman de 4C0, 4C1, 4C2, 4C3 y 4C4.
El programa, usando procedimientos y funciones, se presenta en la figura 41.
Figura 41. Coeficientes binomiales de Newton
Se observa la definición de tres procedimientos, de los cuales dos corresponden a funciones:
fact() y CoefBin() ya que regresan los valores de f y coef, respectivamente, y un procedimiento: Newton(), que se invoca en el cuerpo del programa para solicitar el exponente (n) y llamar a las funciones
para obtener los factoriales y los coeficientes binomiales. Como ejercicio, modificar el programa
anterior para obtener los coeficientes binomiales y generar el triángulo de Pascal, como se muestra
en la figura 42.
40
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
1,1
1,2,1
1,3,3,1
1,4,6,4,1
1,5,10,10,5,1
....
Figura 42. Triángulo de Pascal
El siguiente programa, ver figura 43-a, realiza el cálculo del límite líquido usando la ecuación
de Lambe, que establece que LL=1/2*(w1*(N1/25)0.121+w2*(N2/25)0.121), donde w1 y w2 son las humedades registradas para 5<=N1<25 y 25<N2<=3; la corrida del programa se muestra en la figura 43b.
41
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 43-b. Programa para calcular el límite líquido por el método de Lambe
Una fortaleza del uso de funciones en un programa es que se pueden incluir y usar en otros
programas a manera de bibliotecas importadas externamente y planificadas adecuadamente, como se
observa en la figura 44.
Figura 44. Ejemplo del uso de import
6.2 Archivos secuenciales
Un archivo externo permite almacenar información textual que puede ser llamada con ciertas
funciones para alimentar de datos a un programa, liberando memoria interna mientras el programa se
ejecuta. También se puede guardar información desde la ejecución del programa al archivo externo.
Son varios los formatos que acepta Python para el proceso de archivos o ficheros de almacenamiento externo: CSV, XML, JSON, YAML, entre otros. Los archivos de formato CSV (valores separados por comas «comma-separated values») son archivos de texto fácilmente generables con un editor de texto, con MS Office (Word, Excel), FreeOffice o TextMaker, con la condición de separar con
comas los valores a almacenar.
Las operaciones básicas, como apertura, creación, lectura y escritura de datos están incorporadas en la biblioteca estándar. La función open() permite abrir un archivo de texto (extension .txt)
para leer (read), escribir (write), añadir (append) o leer/escribir (read/write), dependiendo del carácter
indicado en su sintaxis:
open("fichero.txt", "r/w/a/+")
También puede referenciarse a una variable de la siguiente manera:
variable=open("fichero.txt", "r/w/a/+")
Después de usar el fichero, siempre deberá cerrarse (close) el mismo.
Los siguientes datos se almacenaron en un archivo de texto externo, ver figura 45, en formato
CSV que corresponde a los coeficientes de momentos para el diseño de losas perimetralmente apoyadas para el caso monolítco, como lo indican las normas técnicas complementarias para el diseño de
42
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
elementos de concreto reforzado (NTC-2017); el nombre del archivo es CoefMom.txt.
Figura 45. Archivo de texto en formato CSV
Se diseñó un programa que controla, mediante la instrucción with, la lectura read() del archivo
de texto CoefMom.txt asignado a un alias como f, y las operaciones necesarias para la conversión de
datos textuales a valores, definido en un procedimiento llamado archivo(), como se observa en la
figura 46.
Figura 46. Programa para lectura de un archivo externo
43
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
A continuación, ver figuras 47 a y b, se muestra un programa para calcular la estimación
puntual georeferenciada a partir de observaciones históricas existentes de una variable de estudio
utilizando el método IDW (Inverse Distance Weight). En este programa se usa un archivo de texto
(DatosSueloTeh.txt) para almacenar las coordenadas X, Y, Z y las variables de estudio, Q y W, para
leer e ir añadiendo datos conforme se van generando nuevas observaciones georeferenciadas. La estimación se hace conociendo las coordenadas de un punto para las variables de referencia Q y W.
Figura 47-a. Programa AASHTO
44
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 47-b. Programa IDW
45
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
La corrida del programa presenta inicialmente un menú: 0. Ejecutar IDW, 1. Añadir datos, 2. Salir.
La opción 0 ejecuta el método IDW con los datos almacenados en el archivo de texto, mismos que
son leídos con read(); la opción 1 graba nuevos datos en el archivo de texto usando write() hacia un
archivo abierto con la opción append (a). La opción 2 finaliza el programa, incluso saliendo del intérprete mediante la instrucción quit(). La figura 48 muestra la ejecución del programa IDW.
Figura 48. Ejecución del programa IDW
El efecto de la opción 1 se muestra en el archivo de texto de la figura 49.
Figura 49. Archivo de texto con información añadida
46
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
7. INTERFASES GRAFICAS DE USUARIO (GUI) CON EASYGUI
7.1 Instalación de EasyGUI
Una interfase gráfica de usuario (GUI) es un ambiente visual que permite la interacción con
el programa mediante objetos o elementos clásicos del ambiente Windows como cajas de texto, botones, casillas de verificación, barras de desplazamiento, etc.
En Python se pueden utilizar diferentes modos de programación visual usando bibliotecas
especializadas, como TKinter o EASYGUI; esta última es fácil de programar y de muy fácil uso.
Para instalar EASYGUI se recurre a pip de la siguiente forma desde la barra de comandos:
>pip install EASYGUI
Una vez instalada la biblioteca, se llama desde el programa mediante import.
7.2 Elementos GUI de EASYGUI
EasyGUI permite utilizar fácilmente elementos de interfase gráfica para interactuar con el usuario de
un programa, mediante ventanas con objetos pre-establecidos, ya sea para leer datos de las variables
de entrada así como para mostrar resultados de las variables de salida. Esta biblioteca externa debe
ser instalada previamente en Python, usando pip, de forma que el comando escrito desde el símbolo
del sistema realice la instalación de EasyGUI en la carpeta correspondiente de bibliotecas (lib). El
comando es: pip install easygui.
Una vez instalada, se invoca desde un programa mediante la instrucción import de la siguiente
forma:
import easygui as eg
recomendando asignar un alias (eg) para usarlo como método de llamado de las ventanas. Es importante señalar que los elementos a mostrar en una ventana de EasyGUI a través de variables, deberán
ser de tipo cadena (texto o string), por lo que todo número que se desee mostrar como resultado
deberá ser convertido mediante str() a cadena; así mismo, la lectura de variables que involucren datos
numéricos, deberán ser convertidos a éstos mediante eval(), pues las variables sólo reconocen valores
de cadena. Veamos ejemplos para el uso de los diferentes elementos de salida de EasyGUI.
a) msgbox(). Se usa para mostrar los resultados de un proceso mediante una(s) variable(s) de salida
convertidas a texto. Ver figura 50.
Su sintaxis es: eg.msgbox(msg="Texto",title="Titulo",ok_button="OK",image=archivo.gif); el archivo de imagen .gif o .png deberá estar guardado en la misma carpeta del archivo.py correspondiente
al programa y es opcional.
Figura 50. Resultado de msgbox()
Un ejemplo para mostrar el radio y área de un círculo de 30 u con una imagen .gif se observa en la
47
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
figura 51.
Figura 51. Programa y ejecución de un msgbox()
b) boolbox() / ynbox() / ccbox(): Se usan para mostrar un texto de resultado (ver figura 52) con la
opción de dos botones: Si (1) y No (0) equivalentes a True y False, respectivamente; su sintaxis es
parecida entre ambas:
variable=eg.boolbox(msg="Texto",title="Titulo",choices=("Si","No"),imagen=archivo.gif)
variable=eg.ynbox(msg="Texto",title="Titulo",choices=("Si","No"),imagen=archivo.gif)
variable=eg.ccbox(msg="Texto",title="Titulo",choices=("Si","No"),imagen=archivo.gif)
Figura 52. Resultado de boolbox()
El valor de la variable opcion es 1 si se oprime el botón Si
c) buttonbox(): Se usa para mostrar varios botones para seleccionar una opción al oprimir el que se
48
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
escoja, como se muestra en la figura 53. Su sintaxis es: eg.buttonbox(msg="Texto",title="Titulo",choices=("Opcion1","Opcion2",...,"OpcionN",image=archivo.gif)
Figura 53. Resultado de buttonbox()
La variable opción tomará el valor textual del botón oprimido, como se ve en la figura 54.
Figura 54. Resultado de oprimir el botón Producto
d) indexbox(): Similar a buttonbox() pero regresa el valor del índice, según el botón oprimido, empezando de cero (0), de acuerdo a la posición de choices=() como se observa en la figura 55.
Figura 55. Resultado de buttonbox()
La variable opcion es igual a 2 si se oprime el botón Producto, según se ve en la figura 56.
Figura 56. Resultado de oprimir el botón Producto
49
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Las ventanas de EasyGUI que se usan para introducir datos son las siguientes:
a) enterbox(): Se usa para referenciar una cadena de texto a una variable; si se introduce un número
en la caja de texto, deberá convertirse en número con eval() para poderse operar matemáticamente.
Ver figura 57. Su sintaxis es:
variable=eg.enterbox(msg="Texto",title="Titulo",default="Valor",strip=True/False,image=archivo.gif)
Figura 57. Resultado de enterbox()
b) integerbox(): Se usa para ingresar un número entero a través de una caja de texto; pueden definirse
los valores máximo y mínimo. Ver figura 58. Su sintaxis es:
var=eg.integerbox(msg="Texto",title="Titulo",default=valor,lowerbound=min,upperbound=max,image=archivo.gif)
50
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 58. Resultado de integerbox()
c) multenterbox(): Se usa para ingresar varios datos a través de múltiples cajas de texto que están
relacionadas a una lista de textos, como se ve en la figura 58. Su sintaxis es:
variables=eg.multenterbox(msg="Texto",title="Titulo",fields=lista,values=valores)
variables es una lista que contiene los valores definidos en values o que se ingresen en las cajas de
texto.
Figura 59. Resultado de multenterbox()
51
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
d) codebox() y textbox(): Se usan para ingresar texto en varias líneas, a manera de editor de texto. Son
prácticas para mostrar el texto que se almacena en un archivo externo de texto (.txt), como se observa
en la figura 60.
Figura 60. Resultado de textbox()
52
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
7.3 Aplicación con GUI
El siguiente segmento de programa (figura 61) utiliza EASYGUI para capturar los datos de
los retenidos de un suelo para el cálculo de la tabla y curva granulométrica. Para generar la ventana
de captura de los datos se utiliza multenterbox(), como se muestra a continuación:
Figura 61. Codificación de multenterbox()
La corrida del programa mostrando la interfase de usuario seleccionada se muestra en la figura
62.
Figura 62. Resultado de multenterbox()
53
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Para generar la ventana de salida de los resultados se utiliza msgbox(), como se observa en la figura
63.
Figura 63. Codificación y resultado de msgbox()
54
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
La curva granulométrica se realiza usando la biblioteca matplotlib y se presenta su código y
su resultado en la figura 64.
Figura 64. Codificación y gráfica granulométrica con matplotlib
55
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
8. APLICACIONES EN INGENIERÍA CIVIL
Aplicación 1. Programa Avión vs. Misil
Suponga que se quiere derribar un avión mediante un proyectil dirigido justamente en el instante en
el que está inclinado, en relación a nuestra posición, como se indica en la figura 65.
Figura 65. Trayectorias del avión y misil
Para derribarlo, es preciso conocer la altura h del avión, su velocidad va y el ángulo a. El ángulo de
tiro está dado por la expresión:
en donde vm es la velocidad del proyectil. Como la función arco coseno no existe cuando el cociente
es mayor que 1, esto significará que el objetivo es demasiado rápido para alcanzarlo. Más
aún, lo alcanzaremos solo si disparamos en el intervalo angular entre 20° y 70°. El instante de intercepción está dado por:
Si te es superior a 10 segundos, ya no podremos alcanzar al avión por falta de combustible en nuestro
proyectil. Escriba un programa que nos indique si debemos, o no, hacer el intento de disparar el
proyectil. En el caso de poder lograrlo deberá imprimir la leyenda “DISPARE CON UN ANGULO
DE:”, así como el valor del ángulo; de lo contrario, deberá imprimir: “NO DISPARE -IMPOSIBLE
ALCANZARLO-“. Suponga que la velocidad del proyectil es de 1800 ft/seg. Corra el programa para
los datos mostrado en la tabla 3; el programa se muestra en la figura 66.
Tabla 3. Datos para el programa Avión vs. Misil
va
a
h
2000
0°
1000
600
30°
1400
1200
30°
5000
2000
40°
3500
1800
45°
2000
56
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 66. Programa y ejecución de Avión vs. Misil
57
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Aplicación 2. Programa SI-NO
La figura 67 muestra, gráficamente, el área acotada por las desigualdades:
y<3
x+y>1
y<2x+1
y>x2
Figura 67. Área acotada
Escriba un programa que pueda leer las coordenadas de un punto y decidir si está dentro del área sombreada.
La respuesta de la computadora deberá ser, simplemente SI o NO. El programa se muestra en la figura 68 para
la versión con más código y en la figura 69 con menos código al usar operadores lógicos.
Primera versión:
Figura 68. Programa extendido SINO.py
58
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Segunda versión:
Figura 69. Programa reducido SINO.py
Aplicación 3. Problema trigonométrico
Suponga conocidos los valores de un ángulo y dos lados de un triángulo. Concretamente suponga conocidos
los valores a, b y ϴ de la figura 70, y como incógnita el valor de c. Hay varias alternativas para resolver este
problema: puede no tener solución, tener solución única o bien, tener dos soluciones.
Figura 70. Esquema del problema trigonométrico
Estas alternativas pueden determinarse como siguen:
1. Con el ángulo ϴ y el lado a podemos formar un triángulo rectángulo. Los lados h e y pueden calcularse
mediante las relaciones:
2. Si b es menor que h, no habrá solución.
3. Si b es igual a h, la solución es única, es decir, el triángulo es rectángulo y el tercer lado es igual a y.
4. Si b es mayor que h, x puede calcularse con la relación:
Hay dos posibilidades adicionales:
a) Si x es menor que y, las dos soluciones posibles son: y + x y y-x
b) Si x es mayor que y, hay una sola solución: y+x
Escriba un programa que calcule el tercer lado para los siguientes casos mostrados en la tabla 4. El programa
59
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
se muestra en la figura 71 y su corrida en la figura 72.
Tabla 4. Datos para el programa del problema trigonométrico.
ANGULO LADO LADO
TERCER LADO
ϴ
a
b
30°
2
0.5
«No hay solución»
30°
2
1.5
2.85, 0.61
30°
2
3.0
4.56
25°
4
0.85
«No hay solución»
15°
30
20
47.41, 10.55
Figura 71. Programa para el problema trigonométrico
60
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 72. Ejecución del programa del problema trigonométrico
Aplicación 4. Problema de mínimos cuadrados
Supongamos que se tiene una serie de N observaciones experimentales, que representan las cantidades de
fertilizante utilizado por hectárea, y los rendimientos respectivos en términos de kilos de algodón. Para ejemplificar considérese la tabla 5.
Tabla 5. Datos para el problema de mínimos cuadrados
Observaciones
Fertilizante
Rendimientos
(kg/Ha)
de algodón (kg/Ha)
1
100
0.60
2
200
0.95
3
300
1.42
4
175
0.87
5
250
1.20
6
150
0.75
Simbolicemos con la variable independiente X al monto de fertilizantes empleados por hectárea, y con la variable dependiente Y al rendimiento de algodón por hectárea. Queremos ajustar esas observaciones a un modelo
61
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
lineal del tipo:
Para llevar a cabo este procedimiento es necesario calcular los elementos siguientes:
1. El promedio de las observaciones de la variable independiente X:
2. El promedio de las observaciones de la variable dependiente Y:
3. La suma de cuadrados corregida:
4. La suma de productos cruzados corregida:
5. El estimador de mínimos cuadrados para b:
62
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
6. La estimación de a:
Para la tabla mostrada, los resultados deben ser a=0.01814 y b=0.00485. El programa y su corrida se muestran
en la figura 73.
Figura 73. Programa y corrida para mínimos cuadrados
En este ejercicio se utilizaron dos listas, Fert y Rend para almacenar los datos en arreglos.
63
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Aplicación 5. Raíz cuadrada por el método iterativo
Un método para encontrar una raíz cuadrada es la fórmula iterativa:
en la que Si es la estimación de X en la i-ésima iteración. Una alternativa para cerciorarse si hay o no un cambio en la cuarta cifra decimal es escribir la ecuación en la forma:
Cuando
habremos encontrado la solución de acuerdo a nuestro criterio. El programa y su corrida se muestran en la
figura 74.
Figura 74. Programa y corrida para la raíz cuadrada por el método iterativo
64
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Aplicación 6. Solución de un sistema de ecuaciones lineales por eliminación gaussiana
Un sistema de ecuaciones de la forma:
puede expresarse mediante una ecuación matricial Ax=b, es decir:
para formar una matriz aumentada expresada como:
que se resolverá mediante eliminación gaussiana a partir de:
para convertirla en una matriz triangular de la siguiente forma:
y finalmente aplicar sustitución hacia atrás a partir de la expresión:
65
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
El programa para resolver el problema anterior se muestra en la figura 75.
Figura 75. Programa para solucionar un sistema de ecuaciones lineales con eliminación gaussiana
Al ejecutar este programa, se resuelve el sistema mostrado en la matriz aumentada A, cuya corrida es mostrada
en la figura 76.
Figura 76. Corrida del programa para ecuaciones lineales simultáneas
66
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Para correr para cualquier sistema de ecuaciones, deberán convertirse las líneas de N y A en comentarios (#) y
desactivar las comillas triples desde A=[] hasta A.append(fila).
Aplicación 7. Propiedades geométricas de una sección plana
Para una sección plana cerrada S definida por coordenadas (X, Y), sus propiedades geométricas pueden ser
encontradas con las siguientes expresiones matemáticas:
a) Perímetro:
c) Área:
d) Momentos de área:
e) Coordenadas del centro de gravedad:
f) Momentos de inercia:
g) Radios de giro:
67
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Una sección W tiene las coordenadas y perfil de la figura 77.
Figura 77. Coordenadas y perfil W generado
68
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Las propiedades geométricas calculadas con Mathcad se muestran en la figura 78.
Figura 78. Propiedades geométricas calculadas con Mathcad
Elaborar un programa en Python que determine las propiedades geométricas de una sección plana cerrada
mediante la lectura de las coordenadas de los puntos. El programa se muestra en la figura 79. En la figura 80
se muestran los datos de las coordenadas solicitadas al correr el programa y en la figura 81 se observan las
propiedades geométricas calculadas y el perfil W graficado con matplotlib.
69
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 79. Programa para el cálculo de la propiedades geométricas de una sección plana
70
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 80. Coordenadas solicitadas
71
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 81. Propiedades geométricas calculadas y el perfil W graficado con matplotlib
72
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Aplicación 8. Menú de opciones para una aplicación
Cuando se requiere crear una sencilla aplicación que resuelva varios problemas relacionados a un tema, es
recomendable colocar un menú de opciones para que el flujo del programa se lleve de acuerdo a la opción
seleccionada. El siguiente programa muestra las opciones para resolver algunos problemas relacionados con
Mecánica de Suelos y los datos obtenidos en los ensayes del laboratorio, por ejemplo, los datos del muestreo,
la humedad natural del suelo, la densidad de sólidos, los parámetros de las volumetrías y gravimetrías de una
muestra inalterada, los límites de consistencia o de Atterberg, la granulometría del suelo, la permeabilidad, la
resistencia al esfuerzo cortante a partir del ensaye de compresión simple inconfinada, ensaye triaxial, la consolidación unidimensional de los suelos y un conversor de unidades Latitud-Longitud a UTM.
En este programa se presentan dos maneras de llamar a los programas: mediante procedimientos y funciones
declarados dentro del programa principal y mediante importación (import) de aplicaciones ya existentes almacenadas en archivos de programa con la extensión .py.
Algunas opciones no ejecutan ningún programa, solo muestran un mensaje relacionado a la opción. El programa se observa en la figura 82.
73
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 82. Programa para un menú de opciones
Cuando se ejecuta el programa, se muestra el menú de opciones para seleccionar la opción que se desee procesar. Por ejemplo, la primera opción para introducir los datos del sitio de la obra. Una vez capturados los
datos, se regresa al menú de opciones. La ejecución del programa se observa en la figura 83.
74
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 83. Ejecución del programa del menú de opciones
Para obtener la humedad del suelo, se selecciona la opción 2 para ejecutar un procedimiento que solicita los
datos del ensaye en el laboratorio para obtener la cantidad de agua del suelo, como se ve en la figura 84.
Figura 84. Datos y resultado de la opción 2 para calcular la humedad
En la opción 11 se ejecuta un programa para realizar las conversiones de coordenadas geográficas expresadas
en Latitud y Longitud con ángulos sexagesimales a coordenadas UTM (X, Y, Z), utilizando el elipsoide WSG84.
El programa y su corrida se muestran en las figuras 85y 86, respectivamente, con interfase gráfica creada con
EasyGUI.
75
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 85. Programa para convertir Lat-Long a UTM
76
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 86. Corrida del programa para convertir Lat-Long a UTM
77
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Aplicación 9. Ensaye AASHTO
Se llama compactación al proceso de densificar el suelo mediante la reducción de vacíos de aire mediante la
incorporación de una cantidad óptima de agua.
Proctor comprobó que la incorporación gradual de agua al suelo mejoraba el proceso de compactación al obtener pesos volumétricos húmedos crecientes hasta llegar un punto donde no se lograba el incremento, debido
a la saturación del suelo. Proctor observó que el agua tenía la función de lubricar las partículas para lograr un
mejor acomodo de las mismas y, al mismo tiempo, influir en la reducción de sus vacíos, hasta llegar a un punto
donde se lograba la saturación del suelo, es decir, el llenado de agua en todos los vacíos, lo que impedía la
compresibilidad del material. Al graficar los pesos volumétricos secos contra la humedad, observó un gráfico
casi parabólico en donde su máximo representaba el peso volumétrico seco máximo (PVSM) en el eje de las
ordenadas y la humedad óptima (Wo) en el eje de las abscisas.
Existen dos formas de lograr la compactación de los suelos: a) el modelo dinámico, en el cual la compactación
se logra mediante el desplazamiento de un pisón de masa constante y distancia de desplazamiento aplicado a
un suelo colocado en un molde estándar para aplicar determinado número de golpes del pisón en un número
establecido de capas, y b) el modelo estático, en donde la compactación se logra mediante la aplicación de una
carga estándar de forma muy lenta a un suelo colocado dentro de un molde estandarizado. En ambos modelos
se determinan el PVSM y Wo. Al primer modelo se le conoce como «compactación Proctor» y al segundo
como «compactación Porter». En el primer modelo aparece otro concepto importante conocido como Energía
de Compactación y que se expresa como:
Ec = Ng*Nc*Wp*Hc/Vm
donde Ng es el número de golpes, Nc el número de capas, Wp el peso del pisón, Hc la altura de caídad y Vm el
volumen del molde; las unidades asociadas son kgf-cm/cm3.
En las normas SCT se tienen los ensayes AASHTO T99 y AASHTO T180 para obtener el PVSM y la Wo, en
donde se manejan dos tipos: el estándar (T99) y el modificado (T180); para el primer caso se usa un molde de
10.16 cm de diámetro y 11.64 cm de altura, pisón de 2.49 kg f y desplazamiento de 30.5 cm, 25 golpes en 3
capas. Para el segundo caso se usa un molde de 15.24 cm de diámetro y 11.64 cm de altura, pisón de 4.54 kg f
y desplazamiento de 45.72 cm, 56 golpes y 5 capas. Algunas energías de compactación calculadas para diferentes modalidades de ensayes se muestran en la tabla 6.
Tabla 6. Energía de compactación para distintos datos.
Diámetro
Altura
Peso pisón
Desplaz.
No. golpes
No. capas
Volumen
Energía
cm3
kgf-cm/cm3
cm
cm
kgf
cm
10.16
11.64
2.49
30.50
25
3
944
6.034
10.16
11.64
2.49
30.50
30
3
944
7.241
15.24
11.64
4.54
45.72
56
3
2124
17.50
15.24
11.64
4.54
45.72
56
5
2124
27.36
10.16
11.64
2.49
30.50
12
3
944
2.896
15.24
11.64
4.54
45.72
75
5
2144
36.305
Los ensayos AASHTO aplicados para el diseño de pavimentos permiten obtener el valor de soporte California
(CBR).
En el caso del ensaye Porter, también se presentan dos casos: a) el estándar, aplicado a materiales para control
de calidad, y b) el modificado, aplicado a materiales de terracerías para el diseño de pavimentos y obtención
del valor relativo de soporte (VRS) y la expansión (Exp) del material. La aplicación de la carga se realiza a una
velocidad lenta de tal forma que se aplique una carga máxima de 27 Ton durante un tiempo de 5 seg mediante
una prensa hidráulica de 30 Ton; se mantiene la carga durante un minuto y se descarga en el siguiente minuto.
La presión aplicada corresponde a 140.6 kg/cm2.
78
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Para el caso dinámico, se requiere obtener una curva de compactación similar a la de la gráfica de la figura 87.
Figura 87. Curva de compactación para hallar PVSM y humedad óptima
Se recomienda ejecutar el ensaye AASHTO para obtener por lo menos cuatro (4) puntos con sus respectivas
humedades para obtener el peso volumétrico húmedo (PVH) y deducir el peso volumétrico seco (PVS) a partir
de la expresión:
PVSi = PVHi / (1+wi)
Se muestran en la figura 88 los resultados de un ensaye AASHTO T99 para obtener la curva de compactación,
y la deducción del PVSM y Wo generados con Mathcad.
79
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 88. Curva de compactación generada con Mathcad
La corrida del programa en Python es mostrada en la figura 89.
80
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 89. Corrida del programa AASHTO
81
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 90. Curva de compactación generada con matplotlib
En la gráfica de la figura 90, se requiere realizar el ajuste de los puntos a una función parábolica que permita
mostrar su punto máximo, cuyas coordenadas definen al PVSM y a la Wo ajustados. Así mismo, se requieren
trazar las rectas sugeridas por la normativa SCT para ubicar la ordenada máxima y la abscisa de dicho máximo.
Dicho ajuste puede realizarse con el método de mínimos cuadrados para una función cuadrática que establece
lo mostrado en la figura 91.
Figura 91. Ecuaciones para ajustar a una parábola de mínimos cuadrados
82
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Para los datos de la corrida del programa, el ajuste, modelado en Mathcad, sería de la forma mostrada en la
figura 92.
Figura 92. Ajuste de la parábola de mínimos cuadrados
El programa en Python propuesto es el mostrado en la figura 93.
83
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
84
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
85
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 93. Programa AASHTO
86
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Aplicación 10. Ensaye de penetración estándar SPT
La prueba de penetración estándar (SPT) podemos resumirla en lo siguiente: “consiste en hincar el penetrómetro 45 cm con la masa de 64 kg, dejada caer desde 75 cm de altura; durante el hincado se cuenta el número
de golpes que corresponden a cada uno de los tres avances de 15 cm. La resistencia a la penetración estándar
se define como el número de golpes, N , para penetrar los últimos 20 cm (de 15 cm a 45 cm). En la operación
del martinete debe vigilarse que su altura de caída sea constante y que el cable de manila tenga un máximo de
dos vueltas en la cabeza de gato. Una vez terminada una prueba se procede a perforar el tramo muestreado,
hasta alcanzar la profundidad a la que se realizará la siguiente prueba; el diámetro de perforación más recomendable es de 10 cm. Las muestras deben conservarse en frascos o en bolsas herméticas que mantengan
constante el contenido de agua. La información de campo debe recopilarse en un registro”. El programa se
muestra en la figura 94, su corrida en la figura 95 y su gráfico en la figura 96.
87
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
88
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 94. Programa SPT
89
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
90
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 95. Corrida del programa AASHTO
Figura 96. Gráfico del esfuerzo cortante no drenado generado con matplotlib
91
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Aplicación 11. Granulometría de los suelos
La granulometría de un suelo puede resumirse de la siguiente forma: “El ensaye granulométrico de un suelo
permite determinar estadísticamente los tamaños de partículas que se presentan en el mismo mediante el tamizado o cribado por una sucesión de mallas estandarizadas ASTM; se obtienen la tabla y la curva granulométrica;
la primera presenta los resultados de la granulometría gruesa ensayada en seco en el laboratorio, así como los
resultados de la granulometría fina realizada en vía húmeda para lavar los finos (partículas menores a 0.075
mm), secar el material retenido y efectuar el tamizado en seco. La granulometría gruesa se realiza cribando el
suelo por las mallas 3 in (75 mm), 2 in (50 mm), 1 1/2 in (37.5 mm), 1 in (25 mm), 3/4 in (19 mm), 3/8 in (9.5
mm) y No. 4 (4.75 mm); la granulometría fina se efectúa tamizando una fracción del material que pasa la malla
no. 4 en las mallas No. 10 (2.00 mm), No. 20 (0.85 mm), No. 40 (0.425 mm), No. 60 (0.20 mm), No. 100 (0.15
mm) y No. 200 (0.075 mm). La curva granulométrica se realiza graficando el porcentaje que pasa (PQP -%-)
en escala aritmética en el eje de las ordenadas contra el tamaño de la malla (en mm) en escala logarítmica en
el eje de las abscisas”. El programa se muestra en la figura 97, la ventana GUI de captura de datos en la figura
98, los resultados de la tabla granulométrica en una ventana GUI se observan en la figura 99 y la curva granulométrica en la figura 100.
92
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 97. Programa para el análisis granulométrico de un suelo
93
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 98. Ventana GUI para captura de los datos de entrada
94
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 99. Resultados en una ventana GUI del análisis granulométrico
Figura 100. Curva granulométrica
95
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Aplicación 12. VRS vs. CBR
Estos parámetros, que representan la resistencia al esfuerzo cortante confinado del suelo, se obtienen mediante
dos ensayos de compactación estandarizados y se utilizan para verificar la resistencia del material de las capas
del pavimento como control de calidad y para diseñar los espesores de un pavimento a partir de la resistencia
del terreno natural (terracerías).
El primero, VRS o valor relativo de soporte, se obtiene mediante el ensaye estático Porter al compactar a una
muestra de suelo que pase completamente la malla de 25 mm (1 in) mediante presión estática de 127 kg/cm2
durante 5 minutos y una descarga al siguiente minuto; previamente se propuso una humedad cercana a la
óptima y se acomodó la muestra de suelo en el molde Porter con veinticinco varillazos con la varilla punta de
bala de 5/8 in; lograda la presión de compactación, se lleva el molde a la prensa de 5 Ton para aplicarle carga
a una velocidad de 1.27 mm/min, registrar los tiempos (0, 0.5, 1, 2, 3, 4, 6, 8, 10 min) y sus respectivas penetraciones (0, 0.61, 1.27, 2.54, 3.82, 5.08, 7.62, 10.16, 12.54 mm) para obtener el VRS igual a la carga de penetración de 2.54 mm entre la carga estándar de 1360 kgf.
El segundo, CBR o relación de soporte California, se obtiene mediante el ensaye dinámico AASHTO T180 al
compactar con un pisón de 4.50 kgf, caída de 30.5 cm con 56 golpes repartidos en 5 capas dentro de molde
modificado AASHTO; al variar la humedad y obtener el peso volumétrico seco máximo (PVSM) con su respectiva humedad óptima, se lleva a la prensa hidráulica de 5 Ton y se somete a los tiempos y deformaciones
indicados en la prueba Porter. El CBR se obtiene al tomar el mínimo de las cargas a las penetraciones de 2.54
mm y 5.08 mm, respectivamente, divididas entre las cargas estándar 1360 kgf y 2054 kgf.
En ambos casos, si la curva carga-penetración presentara una doble curvatura, deberá realizarse un ajuste al
tomar la recta que pase por el punto de inflexión y prolongándola al eje X para tomar un nuevo origen y calcular
las respectivas cargas de penetración comentadas en los párrafos anteriores.
Figura 101. Ajuste para el VRS o CBR
El programa Python que permite calcular ambos parámetros se muestra en la figura 102 y la corrida del programa en la figura 103.
96
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 102. Programa VRS vs. CBR
97
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 103. Corrida del programa VRS vs. CBR
98
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
Figura 104. Curva Carga vs. Penetración y resultado del CBR
Usando la opción 2, se obtendrá el VRS de acuerdo a lo comentado anteriormente; la opción 3 mostrará ambos
parámetros calculados y la opción 0 terminará la ejecución del programa.
En el programa se utilizaron subprogramas creado con def y las bibliotecas sys, math y matplotlib. Esta última
es externa y debe existir en las carpetas de Python para poder invocarse.
99
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
9. PROBLEMAS PROPUESTOS
1. Cálculo de la raíz cúbica con una fórmula iterativa
La raíz cúbica del número X puede calcularse mediante la fórmula iterativa
Este procedimiento puede iniciarse dando a Si el valor 1. Escriba un programa de computadora para obtener
raíces cúbicas de esta manera. Para propósitos informativos, imprímase el valor de S en cada iteración. Termine
el proceso una vez que la diferencia entre dos iteraciones sucesivas sea menor de 0.01%. La fórmula es cierta
tanto para valores positivos como negativos de X. Su programa debe incluir ambas posibilidades. Utilícelo
para X=235 y X=-91.6
2. Raíz cuadrada con otro método iterativo
Otra manera de formular el método para resolver la raíz cuadrada de un número es el siguiente. Para calcular
la raíz cuadrada de un número B selecciónese cualquier número r1 y con ellos calcúlese h1 tal que
A continuación, encuéntrese el promedio entre r1 y h1 y desígnese con r2:
El siguiente h2 es igual a:
El proceso puede generalizarse mediante las expresiones:
y
Ambas sucesiones se aproximan a la raíz cuadrada de B. Para detener el proceso, utilizamos el criterio |ri-hi|<e
para un e predeterminado. Utilice el programa para calcular las raíces cuadradas de 4590 y 32323, para un
valor inicial r1=1 y e=0.000001.
100
PROGRAMACIÓN PYTHON PARA INGENIEROS CIVILES
ING. EDUARDO LÓPEZ SÁNCHEZ
3. Sucesiones
Las sucesiones
convergen al mismo límite llamado «media geométrica-aritmética». Escriba un programa para leer a y b, verifique si a≤b (de lo contrario, intercambie sus valores), y calcule la secuencia hasta que:
Utilícelo para los valores a=2, b=7 y e=0.00001.
4. Logaritmo de X
La función log10(X) puede representarse, para valores de X en el intervalo 0<X≤2, mediante la siguiente serie
infinita:
Prepare un programa que lea el valor de X, calcule la serie, e imprima el resultado después de 3, 5, 10, 50, 100
y 1000 términos. Además, utilice la función math.log10(X) y compárela con el resultado de la serie. Corra el
programa para el valor X=1.8. Al programar, tome en cuenta que X deberá estar, siempre, dentro del intervalo
mencionado.
5. Interpolación de Lagrange
Se utiliza está técnica para encontrar un valor dentro de un conjunto de datos agrupados en dos listas X e Y
para estimar un valor 𝑌𝑖𝑛𝑡 para un valor dado de 𝑋𝑖𝑛𝑡 . La expresión que calcula a 𝑌𝑖𝑛𝑡 es:
𝑛
𝑛
𝑋𝑖 − 𝑋𝑖𝑛𝑡
𝑌𝑖𝑛𝑡 = ∑ 𝑌𝑖 ∏
𝑋𝑖 − 𝑋𝑗
𝑖=1
𝑗=1
con 𝑖 ≠ 𝑗 para 𝑖, 𝑗 = 1,2, … , 𝑛
6. Parábola de mínimos cuadrados
Para un conjunto de n datos X e Y, la ecuación 𝑦 = 𝑎0 + 𝑎1 𝑥 + 𝑎𝑥 𝑥 2 se determina hallando los coeficientes
𝑎𝑖 , 𝑖 = 0,1,2 mediante la solución del sistema de ecuaciones lineales siguiente; el programa obtenido puede
implementarse en la Aplicación 9. Programa AASHTO.
101
Descargar