clc
clear
xdel(winsid())
format(25)

function y = f(x)
    y = x.^4
endfunction

function y = g(x)
    y = exp(x)
endfunction

// Calcula el valor de la n-ésima derivada de f en
// el punto x.
function y = nth_derivar(f, x, n)
    if(n == 0)
        y = f(x) 
    else
        old = 'f';
        for i=1:n
            new = 'd'+string(i)+'f';
            deff('y='+new+'(x)','y=numderivative('+old+',x)');
            old=new;
        end
        deff('y=ff(x)', 'y=d'+string(n)+'f(x)')
        y = ff(x)
    end
endfunction

// Calcula el polinomio de Taylor de la función f
// de grado n, alrededor del punto a y lo evalua
// en x.
function y = taylorear(f, a, n, x)
    y = 0;
    for k=0:n
        y = y + nth_derivar(f, a, k) * (x - a)^k / factorial(k)
    end
endfunction

disp(taylorear(g, -1.5, 2, -2))
