2.2 Bucles iterativos: while, for, emulación de do-while y control de flujo
1. El bucle while para procesos de convergencia numérica La estructura while reitera un bloque mientras su condición lógica permanezca verdadera: \(\text{while } \text{condición:}\) $$\text{cuerpo_del_bucle}$$ \(\text{actualización_variable}\) Ejemplo: Para calcular cuántas vidas medias transcurren hasta que la actividad decae por debajo del umbral de seguridad: \(\text{actividad} = 100.0; \text{ciclos} = 0\) $$\text{while actividad > 1.0:}$$ $$\text{actividad} = \text{actividad} / 2.0$$ \(\text{ciclos} = \text{ciclos} + 1\) 2. El bucle for y la función generadora range() El bucle for recorre colecciones iterables o secuencias aritméticas generadas por range(inicio, fin, paso): \(\text{range(inicio, fin, paso)} \quad \longrightarrow \quad [\text{inicio}, \text{fin}) \text{ excluyendo el límite superior}\) Ejemplo: Para iterar diez valores de potencial eléctrico espaciados en pasos discretos de 1 a 10 voltios: \(\text{for v in range(1, 11):}\) \(\text{print(f"Potencial de barrido: \{v\} V")}\) 3. Control de flujo en bucles: break, continue y cláusula else Las sentencias de interrupción alteran el flujo habitual del ciclo: \(\text{break (salida inmediata)}, \quad \text{continue (salto a siguiente iteración)}, \quad \text{else (ejecución si no hubo break)}\) Ejemplo: Para ignorar valores nulos durante la integración de una señal espectral: \(\text{for senal in mediciones:}\) $$\text{if senal == 0.0:}$$ $$\text{continue}$$ \(\text{procesar_senal(senal)}\) 4. Emulación de bucles do-while y algoritmos de aproximación Python no posee do-while nativo, pero se emula mediante un bucle infinito while True con break interno: \(\text{while True:}\) $$\text{calcular_aproximacion()}$$ \(\text{if residuo < tolerancia: break}\) Ejemplo: Para iterar un refinamiento numérico hasta alcanzar una tolerancia menor de 1e-6: \(\text{while True:}\) $$\text{x_nuevo} = 0.5 * (\text{x} + \text{a} / \text{x})$$ $$\text{if abs(x_nuevo - x) < 1.0e-6: break}$$ \(\text{x} = \text{x_nuevo}\) Ejemplo 1: Cálculo del número de iteraciones requeridas para el decaimiento radiactivo de un trazador nanoscópico.
Inicialización de actividad inicial y umbral de parada.
Asignamos la actividad al 100% y el criterio de parada en 0.5%:
Ejecución del bucle iterativo while.
Reiteramos la desintegración mientras la actividad sea superior al umbral:
Se requieren 8 vidas medias (30.4 días) para que la actividad decaiga por debajo del 0.5%.
Generación de una rampa lineal de potenciales de barrido para voltamperometría cíclica con for y range().
Configuración de límites y paso discreto.
Deseamos barrer de -500 mV a +500 mV en pasos de 100 mV:
Recorrido iterativo con range incluyendo el límite superior.
Generamos los puntos sumando el paso al límite superior:
El bucle for genera exactamente 11 puntos de muestreo equidistantes entre -0.50 V y +0.50 V.
Filtrado selectivo de señales ruidosas con continue en una serie de mediciones de espesor de capa.
Definición de una secuencia de lecturas con valores físicos y aberrantes.
Declaramos una tupla con valores en nanómetros:
Recorrido saltando mediciones espurias.
Ignoramos lecturas negativas o no físicas mediante continue:
Se procesan 4 valores válidos con un espesor medio de 12.73 nm sin contaminación de valores centinela.
Búsqueda lineal del umbral de percolación eléctrica con interrupción anticipada mediante break.
Serie de fracciones volumétricas de nanotubos en una matriz polimérica.
Asignamos concentraciones ensayadas y sus conductividades eléctricas asociadas:
Detección del primer salto conductor con break.
Buscamos el punto donde la conductividad supera 1e-4 S/m:
El umbral de percolación se detecta tempranamente en una fracción volumétrica de 0.020 (2.0%).
Algoritmo iterativo de Newton-Raphson para aproximar la raíz de una ecuación de estado nanológica.
Parámetros del método iterativo.
Deseamos hallar la solución de f(x) = x³ - 2 = 0 (raíz cúbica de 2):
Ejecución del ciclo iterativo de convergencia.
Actualizamos x = x - f(x)/f'(x) hasta que el cambio sea menor que la tolerancia:
En tan solo 5 iteraciones el método converge a x = 1.25992105 con precisión de siete cifras decimales.