Estimación del error con métodos iterativos

Calcular \( e^{x} \) usando series de Maclaurin para \( x = 0.5 \) usando tres cifras significativas: $$ \begin{equation*} e^{x} = \frac{x^{0}}{0!} + \frac{x^{1}}{1!} + \frac{x^{2}}{2!} + \frac{x^{3}}{3!} + \cdots \end{equation*} $$

El error prefijado \( \epsilon_{s} \) será: $$ \begin{equation*} \epsilon_{s} = \frac{10^{2 - 3}}{2} \cdot 100\% = 0.05\% \end{equation*} $$

Primera aproximación

$$ \begin{equation*} e^{0.5} = 1 \end{equation*} $$

Calculando \( \epsilon_{t} \) $$ \begin{equation*} \epsilon_{t} = \frac{1.648721 - 1}{1.648721} \cdot 100\% = 39.35\% \end{equation*} $$

Calculando \( \epsilon_{a} \) $$ \begin{equation*} \epsilon_{a} = \frac{1 - 0}{1} \cdot 100\% = 100\% \end{equation*} $$

Segunda aproximación

$$ \begin{equation*} e^{0.5} = 1 + 0.5 = 1.5 \end{equation*} $$

Calculamos \( \epsilon_{t} \) $$ \begin{equation*} \epsilon_{t} = \frac{1.648721 - 1.5}{1.648721} \cdot 100\% = 9.02\% \end{equation*} $$

Calculamos \( \epsilon_{a} \) $$ \begin{equation*} \epsilon_{a} = \frac{1.5 - 1}{1.5} \cdot 100\% = 33.33\% \end{equation*} $$

Implementación

Mediante el siguiente programa se calculará los errores de aproximación:

x = 0.5
valor_actual = 0.0

@printf("%s \t %s \t %s \t %12s\n", "iteración", "exp(0.5)", "ϵₜ %", "ϵₐ %")

for i = 0:5
    valor_anterior = valor_actual
    valor_actual = valor_actual + (x^i)/factorial(i)
    et = ((exp(x) - valor_actual)/exp(x))*100
    ea = ((valor_actual - valor_anterior) / valor_actual)*100
    @printf("%d \t %16f \t %f \t %f\n", i+1, valor_actual, et, ea)

    iteración 	 exp(0.5) 	 ϵₜ % 	         ϵₐ %
    1 	         1.000000 	 39.346934 	 100.000000
    2 	         1.500000 	 9.020401 	 33.333333
    3 	         1.625000 	 1.438768 	 7.692308
    4 	         1.645833 	 0.175162 	 1.265823
    5 	         1.648438 	 0.017212 	 0.157978
    6 	         1.648698 	 0.001416 	 0.015795

Seudocódigo para cálculos iterativos

función MetodoIterativo(valor, es, iteración_máxima)
    iteración = 1
    solución_actual = valor
    ea = 100
    hacer
        iteración = iteración + 1
        solución_anterior = solución_actual
        solución_actual = ...
        si solución_actual != 0
            ea = abs((solución_actual - solución_anterior) / solución_actual) * 100
        fin si
    hasta (ea <= es) o (iteración >= iteración_máxima)
    fin hacer
    MetodoIterativo = solución_actual
fin MetodoIterativo

Implementación para calcular \( e^{x} \)

function exponencial(x, es, i_max)
    i = 0
    valor_actual = 0
    while true
        valor_anterior = valor_actual
        valor_actual = valor_actual + (x^i)/factorial(i)
        i = i + 1
        if valor_actual != 0
            ea = ((valor_actual - valor_anterior) / valor_actual)*100
        end
        if (ea <= es) || (i >= i_max)
            println("iteración = ", i) # solo para comprobar
            println("ea = ", ea) # solo para comprobar
            println("et = ", ((exp(x) - valor_actual)/exp(x))*100) # solo para comprobar
            break
        end
    end
    return valor_actual
end

    exponencial (generic function with 1 method)

exponencial(1, 1e-6, 100)

    iteración = 12
    ea = 9.216155641522974e-7
    et = 8.316106763523326e-8

    2.718281826198493