Ask Your Question

Condition in sum() function?

asked 2014-11-22 19:50:08 +0200

mpatton gravatar image

updated 2015-01-14 09:48:21 +0200

FrédéricC gravatar image


I'm trying to use the exponential form of the Fourier series representation of a function to plot an approximation of said function using the first five terms.

The actual function is f(t) = 1/2 + j/(2pi) * E from (n = -5) to (n = 5) of ((-1)^n - 1)/n * e^(j2npi*t), where n =/= 0

Here I'm using 'E' to indicate summation notation. I apologize if this deviates from an established standard, but I'm having trouble uploading images right now (which would have made the function clearer).

The code I'm using for this function is

var('n, t')
j = i    # imaginary unit
expr = ((-1)^n - 1)/n * exp(2*pi*n*j*t)    # I think the problem is the division by 'n' here
assume(n, 'integer'); assume(n != 0)
f(t) = 1/2 + j/(2*pi) * sum(expr, n, -5, 5)

However, when I try this, I get the following exception:

RuntimeError: ECL says: Error executing code in Maxima: expt: undefined: 0 to a negative exponent.

This seems to be due to the division by n in expr. Are my assumptions not working here? Thus, my actual question is how can I add the condition n != 0 to the sum() function in sage?

edit retag flag offensive close merge delete


Unfortunately, Maxima's assumption framework is not particularly strong. But Sage definitely won't know about it in your sum, since you are now using n also as a kind of dummy variable. I think it might be easier to just make two sums in this case, because 0 is only number you want to avoid in your general case, right?

kcrisman gravatar imagekcrisman ( 2014-11-23 03:33:30 +0200 )edit

Yes, I only want to avoid n = 0. Thank you for your input, I ended up using the answer below.

mpatton gravatar imagempatton ( 2014-11-24 02:29:57 +0200 )edit

1 Answer

Sort by » oldest newest most voted

answered 2014-11-24 01:57:02 +0200

tmonteil gravatar image

updated 2014-11-24 02:08:27 +0200

Only t is a symbol, so you can define expr as a (Python) function of the (Python) variable n and then sum over the good set of n's.

sage: t = var('t')
sage: j = i
sage: expr = lambda n : ((-1)^n - 1)/n * exp(2*pi*n*j*t)
sage: f(t) = 1/2 + j/(2*pi) * sum([expr(n) for n in range(-5,6) if n != 0])
sage: f(t)
-1/15*I*(3*e^(10*I*pi*t) + 5*e^(6*I*pi*t) + 15*e^(2*I*pi*t) - 15*e^(-2*I*pi*t) - 5*e^(-6*I*pi*t) - 3*e^(-10*I*pi*t))/pi + 1/2
edit flag offensive delete link more


This is precisely what I was looking for. I didn't even think to use n as a Python variable. Thank you sir.

mpatton gravatar imagempatton ( 2014-11-24 02:34:40 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools


Asked: 2014-11-22 19:50:08 +0200

Seen: 1,636 times

Last updated: Nov 24 '14