sumatorio de una exponencial

Jose Manuel
07 de Noviembre del 2009
Buenas tardes

Estoy intentando desarrollar una función en Matlab en la que, partiendo de una expresión simbólica f(z),se calcule un sumatorio de la siguiente forma:

g(z) = sumatorio desde k=0 hasta N-1 de f(e^(j*2*pi*k/N) * z^(1/N))

(se que es un poco extraño, pero es una de las funciones básicas que hay que calcular cuando estas operando con sistemas que trabajan con más de una frecuencia)

por ejemplo, si N=3 y f(z)=1/(z+1) --> g(z) = 1/(z+1) (es decir, g(z)=f(z)). Pero con matlab, debido (supongo) a que se arrastran errores en el calculo de las exponenciales, no logro sacar las g(z)


Dejo el código que he probado hasta ahora:

syms z
funcion_simbolica=z/(z+1)

sum_func_simb = [];
%Calculamos la exponencial para cada término, y sustituimos. sum_func_simb es el vector que contiene los términos que hay que sumar
for k=0:N-1
e=exp(1i*2*pi*k/N) ;
parte_real_e=roundn(real(e),-5);
parte_imag_e =roundn(imag(e),-5);
e = parte_real_e+ parte_imag_e*j;
aux_funcion_simbolica=subs(funcion_simbolica,{z},{e*z^(1/N)});
sum_func_simb = [sum_func_simb; aux_funcion_simbolica];
end

%Para intentar simplificar, uso vpa para cortar el numero de decimales
k=1;
while k<= length(sum_func_simb)
sum_func_simb (length(sum_func_simb)+1-k) = vpa(sum_func_simb (length(sum_func_simb)+1-k),4);
k = k+1;
end

%Y ahora ya sumo todos los términos
bloque_skip = SUM(sum_func_simb,1);

Al pasarle este código, el resultado que obtengo es:

z^(1/3)/(z^(1/3)+1.)+(-.5000+.8660*i)*z^(1/3)/((-.5000+.8660*i)*z^(1/3)+1.)-(.5000+.8660*i)*z^(1/3)/((-.5000-.8660*i)*z^(1/3)+1.)


resultado que no se parece al que debería obtener...


Si alguien pudiese darme una pista de por dónde atacar este problema, le estaría muy agradecido, ya que me he quedado ya sin ideas...La verdad es que mi experiencia en programación con Matlab es tirando a nula, pero para el proyecto fin de carrera me toca programar con Matlab y Sysquake

Un saludo
Jose Manuel