4 votos

Computación $e^x$ en la Octava utilizando sólo +,-,*,/,^.

Tengo que escribir una función en la Octava que es la computación e^x. Escribí esto:

function y=f(x)
    y=0; t=1; k=1;
        while abs(t)>0.001
        y=y+t;
        t=t*(x/(2*k));
        k=k+1;
        end
    y=y^2;
end;

Todo está bien cuando estoy computing $f(20)$ o $f(-30)$ etc. Pero cuando trato de calcular $f(-2000)$ debo conseguir $ \approx 0$, pero Octava dice que es $\infty$. Es mi culpa (me refiero a algo malo con código)?

1voto

Susan L Smith Puntos 6

En el espíritu de arbautjc comentario, dado que los operadores que usted tiene, usted puede asegurarse siempre de que la magnitud del argumento es menor que $1$. Además si $x<0$, usted puede hacer como vonbrand sugerido y el uso del índice de leyes para ayudar a sus cálculos. Esto probablemente va a ser mucho más lento que la simple utilización de la exp(..) comando integrado.

El siguiente es el código de MATLAB, pero se debe trabajar en la Octava así.

function y = myexp(x)
    % determine if x is negative or not
    if (x < 0)
        isneg = true;
        x = -x;
    else
        isneg = false;
    end

    % scale the input variable to have magnitude less than 1
    scale = 1; % initialise the scale argument
    factor = 16; % set a factor which will be used to increment the scale
    while x > 1
        x = x / factor;
        scale = scale * factor;
    end

    % evaluate exp(x) with 0<x<1
    y=0; t=1; k=1; % initialise parameters
    tol = 1e-6; % convergence tolerance
    while abs(t)>tol
        y=y+t;
        t=t*(x/k);
        k=k+1;
    end

    % unscale the result
    y=y^scale;

    % check if the input was negative and reciprocate the result if needed
    if isneg
        y = 1/y;
    end
end

Algunos de los resultados que se muestran a continuación. V es valor y T es el tiempo de ejecución. tol estaba a 1e-6.

x=-100
exp V: 3.720076e-44 T: 0.000004
myexp   V: 3.720262e-44 T: 0.000059
x=-10
exp V: 4.539993e-05 T: 0.000002
myexp   V: 4.540017e-05 T: 0.000021
x=-5
exp V: 6.737947e-03 T: 0.000002
myexp   V: 6.737952e-03 T: 0.000016
x=-4
exp V: 1.831564e-02 T: 0.000002
myexp   V: 1.831572e-02 T: 0.000016
x=-3
exp V: 4.978707e-02 T: 0.000002
myexp   V: 4.978711e-02 T: 0.000016
x=-2
exp V: 1.353353e-01 T: 0.000002
myexp   V: 1.353358e-01 T: 0.000016
x=-1
exp V: 3.678794e-01 T: 0.000002
myexp   V: 3.678795e-01 T: 0.000015
x=0
exp V: 1.000000e+00 T: 0.000002
myexp   V: 1.000000e+00 T: 0.000016
x=1
exp V: 2.718282e+00 T: 0.000002
myexp   V: 2.718282e+00 T: 0.000016
x=2
exp V: 7.389056e+00 T: 0.000002
myexp   V: 7.389029e+00 T: 0.000016
x=3
exp V: 2.008554e+01 T: 0.000002
myexp   V: 2.008552e+01 T: 0.000016
x=4
exp V: 5.459815e+01 T: 0.000002
myexp   V: 5.459791e+01 T: 0.000017
x=5
exp V: 1.484132e+02 T: 0.000002
myexp   V: 1.484131e+02 T: 0.000016
x=10
exp V: 2.202647e+04 T: 0.000002
myexp   V: 2.202635e+04 T: 0.000017
x=100
exp V: 2.688117e+43 T: 0.000002
myexp   V: 2.687982e+43 T: 0.000016

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X