Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROFESOR:
Daniel López De Mesa Aguilar
ING. CIVIL
UNIVERSIDAD DE MEDELLÍN
2020
Punto 1. Presente un código en el que genere un vector con los números del 1 al 6. Guarde
en una variable la sumatoria de todos los elementos del vector. El código debe funcionar
para cualquier vector de cualquier magnitud.
Código:
Created on Wed Sep 30 14:15:22 2020
@author: JR SANCHEZ
"""
import numpy as np
vector=np.linspace(1,6,6)
suma=0
for i in vector:
suma=suma+i
print(suma)
Consola:
runfile('D:/USUARIO/Escritorio/Modelacion Numerica/Ejercicio del Trabajo_1/Ejercicio
for.py', wdir='D:/USUARIO/Escritorio/Modelacion Numerica/Ejercicio del Trabajo_1')
1.0
3.0
6.0
10.0
15.0
21.0
Punto 2. Presenta el código para generar la gráfica y la gráfica de la función e x, tal que el
resultado sea igual al de la diapositiva de clases.
Código:
# -*- coding: utf-8 -*-
"""
Created on Wed Oct 07 5:40:29 2020
@author: JR SANCHEZ
"""
import numpy as np
import matplotlib.pyplot as pl
import math
fig = pl.figure(figsize=(4.8,5.0)) # Se genera la ventana para la figura con dimensiones 4.8 x 5.0
fig.patch.set_facecolor('w') # El fondo de la figura queda de color blanco
# Definición de funciones.
def f1(x):
return math.exp(x)
# Valores del eje x que toma el gráfico.
x = np.linspace(-5,5,100)
# Gráfica.
pl.plot(x, [f1(i) for i in x], marker = '.', linestyle='-', color='r', linewidth = 0.5, label = '$f(x)=e^{x}$') #
características de la gráfica de la función
pl.xlabel('$x$', fontsize = 8) # características del título del eje "x"
pl.ylabel('$f(x)$', fontsize = 8) # características del título del eje "y"
pl.axis([-5, 5, 0, 150]) # Límites del eje "x" y del eje "y"
pl.xticks(np.arange(-5, 5.5,1)) # Delta del eje "x"
pl.yticks(np.arange(0, 151, 10)) # Delta del eje "y"
pl.grid(True) # Activar la grilla o cuadrícula de fondo
pl.legend(loc = 1, fontsize = 8) # Activar la visualización de la leyenda de una gráfica
pl.tick_params(axis='both', which='major', labelsize= 8) # Tamaño de los números de los ejes
fig.tight_layout() # Extiende bien la figura en la ventana
pl.show() # Para mostrar la figura
Consola:
Punto 3. Graficar la función ex y su expansión en series de Taylor. Presente un análisis de
sensibilidad en Word en función del número de términos de la serie de Taylor.
Código:
# -*- coding: utf-8 -*-
"""
# ECUACION DE LA EXPANSION DE TAYLOR
Created on Wed Oct 10 16:05:55 2020
@author: JR SANCHEZ
"""
import numpy as np
import matplotlib.pyplot as pl
import math
fig = pl.figure(figsize=(4.8,5.0)) # Se genera la ventana para la figura con dimensiones 4.8 x 5.0
fig.patch.set_facecolor('w') # El fondo de la figura queda de color blanco
# Definición de funciones.
def f1(x):
return math.exp(x)
#valores de a
a=0
def f2(x):
return math.exp(a)*((1+(x-a)/1)+((x-a)**2/(2*1))+((x-a)**3/(3*2*1))+((x-a)**4/(4*3*2*1))+((x-
a)**5/(5*3*2*1))+((x-a)**6/(6*5*4*3*2*1)))
def f3(x):
return math.exp(a)*((1+(x-a)/1)+((x-a)**2/(2*1))+((x-a)**3/(3*2*1))+((x-a)**4/(4*3*2*1))+((x-
a)**5/(5*3*2*1)))
def f4(x):
return math.exp(a)*((1+(x-a)/1)+((x-a)**2/(2*1))+((x-a)**3/(3*2*1))+((x-a)**4/(4*3*2*1)))
def f5(x):
return math.exp(a)*((1+(x-a)/1)+((x-a)**2/(2*1))+((x-a)**3/(3*2*1)))
def f6(x):
return math.exp(a)*((1+(x-a)/1)+((x-a)**2/(2*1)))
def f7(x):
return math.exp(a)*((1+(x-a)/1))
# Valores del eje x que toma el gráfico.
x = np.linspace(-6,6,200)
# Gráfica f1 (diapositiva 13).
pl.plot(x, [f1(i) for i in x], marker = 'x', linestyle='-', color='k', linewidth = 1.7, label = '$f(x)=e^{x}$') #
características de la gráfica de la función
pl.plot(x, [f2(i) for i in x], marker = 'x', linestyle='-', color='r', linewidth = 1.7, label = '$f(x)=Taylor(6)$') #
características de la gráfica de la función
pl.plot(x, [f3(i) for i in x], marker = 'x', linestyle='-', color='b', linewidth = 1.7, label = '$f(x)=Taylor(5)$') #
características de la gráfica de la función
pl.plot(x, [f4(i) for i in x], marker = 'x', linestyle='-', color='y', linewidth = 1.7, label = '$f(x)=Taylor(4)$') #
características de la gráfica de la función
pl.plot(x, [f5(i) for i in x], marker = 'X', linestyle='-', color='m', linewidth = 1.7, label = '$f(x)=Taylor(3)$') #
características de la gráfica de la función
pl.plot(x, [f6(i) for i in x], marker = 'x', linestyle='-', color='g', linewidth = 1.7, label = '$f(x)=Taylor(2)$') #
características de la gráfica de la función
pl.plot(x, [f7(i) for i in x], marker = 'x', linestyle='-', color='c', linewidth = 1.7, label = '$f(x)=Taylor(1)$') #
características de la gráfica de la función
pl.xlabel('$x$', fontsize = 8) # características del título del eje "x"
pl.ylabel('$f(x)$', fontsize = 8) # características del título del eje "y"
pl.axis([-7, 7, 0, 150]) # Límites del eje "x" y del eje "y"
pl.xticks(np.arange(-7, 7.1, 1)) # Delta del eje "x"
pl.yticks(np.arange(-150, 150, 10)) # Delta del eje "y"
pl.grid(True) # Activar la grilla o cuadrícula de fondo
pl.legend(loc = 2, fontsize = 8) # Activar la visualización de la leyenda de una gráfica
pl.tick_params(axis='both', which='major', labelsize=8) # Tamaño de los números de los ejes
fig.tight_layout() # Extiende bien la figura en la ventana
pl.show() # Para mostrar la figura
# Definición de funciones.
def f1(x):
return math.exp(x)
#a=1
a=3
def f2(x):
return math.exp(a)*((1+(x-a)/1)+((x-a)**2/(2*1))+((x-a)**3/(3*2*1))+((x-a)**4/(4*3*2*1))+((x-
a)**5/(5*3*2*1))+((x-a)**6/(6*5*4*3*2*1)))
def f3(x):
return math.exp(a)*((1+(x-a)/1)+((x-a)**2/(2*1))+((x-a)**3/(3*2*1))+((x-a)**4/(4*3*2*1))+((x-
a)**5/(5*3*2*1)))
def f4(x):
return math.exp(a)*((1+(x-a)/1)+((x-a)**2/(2*1))+((x-a)**3/(3*2*1))+((x-a)**4/(4*3*2*1)))
def f5(x):
return math.exp(a)*((1+(x-a)/1)+((x-a)**2/(2*1))+((x-a)**3/(3*2*1)))
def f6(x):
return math.exp(a)*((1+(x-a)/1)+((x-a)**2/(2*1)))
def f7(x):
return math.exp(a)*((1+(x-a)/1))
# Valores del eje x que toma el gráfico.
x = np.linspace(-6,6,200)
# Gráfica f1 (diapositiva 13).
pl.plot(x, [f1(i) for i in x], marker = '+', linestyle='-', color='k', linewidth = 1.7, label = '$f(x)=e^{x}$') #
características de la gráfica de la función
pl.plot(x, [f2(i) for i in x], marker = '+', linestyle='-', color='r', linewidth = 1.7, label = '$f(x)=Taylor(6)$') #
características de la gráfica de la función
pl.plot(x, [f3(i) for i in x], marker = '+', linestyle='-', color='b', linewidth = 1.7, label = '$f(x)=Taylor(5)$') #
características de la gráfica de la función
pl.plot(x, [f4(i) for i in x], marker = '+', linestyle='-', color='y', linewidth = 1.7, label = '$f(x)=Taylor(4)$') #
características de la gráfica de la función
pl.plot(x, [f5(i) for i in x], marker = '+', linestyle='-', color='m', linewidth = 1.7, label = '$f(x)=Taylor(3)$') #
características de la gráfica de la función
pl.plot(x, [f6(i) for i in x], marker = '+', linestyle='-', color='g', linewidth = 1.7, label = '$f(x)=Taylor(2)$') #
características de la gráfica de la función
pl.plot(x, [f7(i) for i in x], marker = '+', linestyle='-', color='c', linewidth = 1.7, label = '$f(x)=Taylor(1)$') #
características de la gráfica de la función
pl.xlabel('$x$', fontsize = 8) # características del título del eje "x"
pl.ylabel('$f(x)$', fontsize = 8) # características del título del eje "y"
pl.axis([-7, 7, 0, 150]) # Límites del eje "x" y del eje "y"
pl.xticks(np.arange(-7, 7.1, 1)) # Delta del eje "x"
pl.yticks(np.arange(-150, 150, 10)) # Delta del eje "y"
pl.grid(True) # Activar la grilla o cuadrícula de fondo
pl.legend(loc = 2, fontsize = 8) # Activar la visualización de la leyenda de una gráfica
pl.tick_params(axis='both', which='major', labelsize=8) # Tamaño de los números de los ejes
fig.tight_layout() # Extiende bien la figura en la ventana
pl.show() # Para mostrar la figura
Análisis:
En la expansión de la serie de taylor se tiene que cada valor de a, se tiene el siguiente análisis
Para a=0, considerando que la primera deriva de f(x) =e x es f´(x) = ex , entonces ….fn (x)=1.
Por lo que la expansión a 6 términos de la serie de Taylor tendríamos:
1 1 1 1 1 1
𝑒0 = 1 + + + + + + … = 2.718055556
1! 2! 3! 4! 5! 6!
Valor analítico de 𝑒 = 2.718281828
Vemos que la convergencia es casi completa cuando a=0 (e0=1) para los polinomios de
grado 3,4,5 y 6 sobre el eje y =1.
La red mostrada descarga al río una concentración de sodio de 0.07𝑘𝑔/𝑚3. Una comisión
enviada al sitio tomó una muestra de agua en el punto 𝐿, a 200 𝑚 de distancia, y la
concentración de 𝑁𝑎 en el laboratorio fue 0.04𝑘𝑔/𝑚^3. Una bocatoma, por motivos de
cercanía al pueblo, debe construirse lo más cerca posible al punto 0. Si se sabe que el agua
se considera potable para ∅≤0.05𝑘𝑔/𝑚3, ¿a qué distancia mínima del punto 0 se puede
construir la bocatoma? La velocidad media del río es 0.01 𝑚/𝑠, y el coeficiente de
difusividad molecular del sodio. en el agua es Γ=1.33m2/s
Solución: Lógica programada:
4.1 ¿a qué distancia mínima del punto 0 se puede construir la bocatoma?
De acuerdo con la solución analítica y conociendo que el agua se considera potable con una
concentración Φ ≤ 0.05 kg/m3, a una distancia como mínima de 158 a 160 m desde el punto
0. Ver gráfico de solución analítica.
Se presentan las soluciones obtenidas que la metodología BDS, a diferencia del enfoque de
la metodología CDS, aporta una solución que no converge adecuadamente, generando
severas diferencias en cuanto a la posición de la bocatoma desde el punto 0. El enfoque
central se ajusta más a la solución analítica desarrollada.
Código CDS:
Código BDS:
4.3 Resuelva con varios números de nodos, compare y analice.
Se corre la programación con diferentes valores de nodos, que para la lógica del código está
declarado como variable n:
n 200
Metodología Distancia (m)
Analítico 159
CDS 151
BDS 168
n 100
Metodología Distancia (m)
Analítico 160
CDS 155
BDS 172
n 10
Metodología Distancia (m)
Analítico 160
CDS 158
BDS 172
n 2
Metodología Distancia (m)
Analítico 132
CDS 132
BDS 132
De las gráficas anteriores expuestas, se puede concluir que al disminuir (arranca 200
termina 2) el número de nodos (variable n del código) la solución para cada esquema o
metodología, incluyendo la solución analítica que está en función de n en el código, adoptan
una tendencia lineal, alejándose un poco de la solución real que representa la ecuación de
transporte. Vemos que para n=2 las tendencias son 3 líneas rectas casi paralelas. Como la
solución ingenieril del problema planteada es a que distancia del punto de vertimiento o 0
se puede construir la bocatoma, se recomendaría usar el n de mallas más fina (depende de
la capacidad del equipo donde se programe) y buscar realmente la concentración máxima
permitida de 0.05 kg/m3.
4.4 Realice un análisis de sensibilidad con la velocidad del río y el coeficiente de difusividad.
Condición inicial:
gama 1.33
u 0.01
n 200
Metodología Distancia (m)
Analítico 159
CDS 151
BDS 168
I. Doblando velocidad:
gama 1.33
u 0.02
n 200
Metodología Distancia (m)
Analítico 175
CDS 169
BDS 185
II. Reduciendo al 50% la velocidad:
gama 1.33
u 0.005
n 200
Metodología Distancia (m)
Analítico 148
CDS 137
BDS 154
gama 2.00
u 0.01
n 200
Metodología Distancia (m)
Analítico 155
CDS 140
BDS 180
IV. bajando la difusividad a 0.65 (mitad) con velocidad original:
gama 0.65
u 0.01
n 200
Metodología Distancia (m)
Analítico 175
CDS 170
BDS 150
Del anterior conjunto de graficas se puede concluir que a mayor velocidad del rio, la
concentración de sodio incrementa su dispersión, por lo que el punto para construir la
bocatoma se ira alejando cada vez más del punto 0, se puede observar los valores tabulados
en cada gráfica. Respecto al coeficiente difusividad se observa que el esquema backward
“BDS” incide mayormente con variabilidad de este valor, lo que se puede ver que es un
término que se repite en el desarrollo en la solución de la ecuación del sistema backward.
4.5 En el código de python, en cada paso de cálculo muestre el residual y defina un criterio
de convergencia.
Se propone en el código ciclo para actualizar y recorrer todas las posiciones del vector
creado inicialmente, utilizando la función del CDS. Se aplica el criterio de convergencia de
Gauss-Seidel, a partir de un residual definido por:
Donde Fφ (F) corresponde a un valor de concentración definido a criterio que para este caso
corresponde a una concentración mínima dentro del rango para poder hacer la bocatoma.