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