Matlab - sumatorio de una exponencial

   
Vista:

sumatorio de una exponencial

Publicado por Jose Manuel (1 intervención) el 07/11/2009 17:21:05
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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder