Ejercicio: 1Eva_IIT2019_T4 Concentración de químico
formula a usar:
C=Cent(1−e−0.04t)+C0e−0.03t
Se sustituyen los valores dados con:
C0 = 4, Cent = 10, C = 0.93 Cent.
0.93(10)=10(1−e−0.04t)+4e−0.03t
igualando a cero para forma estandarizada del algoritmo,
10(1−e−0.04t)+4e−0.03t−9.3=0
0.7−10e−0.04t+4e−0.03t=0
se usas las funciones f(t) y f'(t) para el método de Newton-Raphson,
f(t)=0.7−10e−0.04t+4e−0.03t
f′(t)=−10(−0.04)e−0.04t+4(−0.03)e−0.03t
f′(t)=0.4e−0.04t−0.12e−0.03t
con lo que se pueden realizar los cálculos de forma iterativa.
ti+1=ti−f′(ti)f(ti)
De no disponer de la gráfica de f(t), y se desconoce el valor inicial para t0 se usa 0. Como no se indica la tolerancia, se estima en 10-4
Iteración 1
t0 = 0
f(0)=0.7−10e−0.04(0)+4e−0.03(0)=5.3
f′(0)=0.4e−0.04(0)−0.12e−0.03(0)=−0.28
t1=0−−0.285.3=18.92
error=∣18.92−0∣=18.92
Iteración 2
f(18.92)=0.7−10e−0.04(18.92)+4e−0.03(18.92)=−1.72308
f′(18.92)=0.4e−0.04(18.92)−0.12e−0.03(18.92)=0.119593
t2=18.92−0.119593−1.723087=33.3365
error=∣33.3365−18.92∣=14.4079
Iteración 3
f(33.3365)=0.7−10e−0.04(33.3365)+4e−0.03(33.3365)=−0.4642
f′(33.3365)=0.4e−0.04(33.3365)−0.12e−0.03(33.3365)=0.06128
t3=33.3365−−5.8013−0.46427=40.912
error=∣40.912−33.3365∣=7.5755
Observando que los errores disminuyen entre cada iteración, se encuentra que el método converge.
y se forma la siguiente tabla:
['xi' , 'xnuevo', 'error']
[ 0. 18.9286 18.9286]
[18.9286 33.3365 14.4079]
[33.3365 40.912 7.5755]
[40.912 42.654 1.742]
[42.654 42.7316 0.0776]
[4.2732e+01 4.2732e+01 1.4632e-04]
raiz en: 42.731721341402796
Observando la gráfica de la función puede observar el resultado:

Algoritmo en Python
# 1Eva_IIT2019_T4
# Método de Newton-Raphson
import numpy as np
import matplotlib.pyplot as plt
# INGRESO
fx = lambda t: 0.7-10*np.exp(-0.04*t)+4*np.exp(-0.03*t)
dfx = lambda t:0.40*np.exp(-0.04*t)-0.12*np.exp(-0.03*t)
x0 = 0
tolera = 0.001
a = 0
b = 60
muestras = 21
# PROCEDIMIENTO
tabla = []
tramo = abs(2*tolera)
xi = x0
while (tramo>=tolera):
xnuevo = xi - fx(xi)/dfx(xi)
tramo = abs(xnuevo-xi)
tabla.append([xi,xnuevo,tramo])
xi = xnuevo
tabla = np.array(tabla)
n=len(tabla)
# para la gráfica
xk = np.linspace(a,b,muestras)
fk = fx(xk)
# SALIDA
print(['xi', 'xnuevo', 'error'])
np.set_printoptions(precision = 4)
for i in range(0,n,1):
print(tabla[i])
print('raiz en: ', xi)
# grafica
plt.plot(xk,fk)
plt.axhline(0, color='black')
plt.xlabel('t')
plt.ylabel('f(t)')
plt.show()