[✓] Get Fourier series coefficients with for loop?

GROUPS:
 Hello everyone, I'd like to get the coefficients of the Fourier series with a for loop. I tried to do it in the following way: For[i = -10, i < 11, i++, FourierCoefficient[Sin[t], t, i]] but it does not work. Can you help me please?Thank you very much.
9 months ago
8 Replies
 Ed Forrester 1 Vote Gennaro, try this: Table[FourierCoefficient[Sin[t], t, i], {i, -10, 10}] Regards,
9 months ago
 Ed Forrester 1 Vote Gennaro, a side note. Stephen Wolfram mentions in his book "An Elementary Introduction To The Wolfram Language" on page 237 that the For command is almost always a bad idea, and can almost always be replaced by much cleaner code using constructs such as Table.
9 months ago
 Hi @Ed Forrester. Do you know why for command is bad?
9 months ago
 Sorry, I don't know the reason. I was alerting you to Stephen Wolfram's statement since you were using a For command to solve your problem.Regards
9 months ago
 Fourier series coefficients with for loop
 Michael Rogers 1 Vote Here are some examples of the type of for-loops I've seen from those coming to Mathematica from imperative programming languages like C/Java, where for-loops dominate. I'll present non-for-loop equivalents, in some cases with timings, which will be seen to be an significant difference.Iterate a command f[] (here f is a no-op, so the timing reflects the overheads of For and Do): ClearAll[f, i]; For[i = 1, i <= 10^6, i++, f[i]]; // AbsoluteTiming (* i is a global variable *) i Clear[i] Do[f[i], {i, 10^6}]; // AbsoluteTiming (* i is a local variable *) i (* Out[]= {1.01164, Null} 1000001 {0.226265, Null} i *) Note that i is not localized in For. The user has to localize i explicitly to get an equivalent behavior of Do: Block[{i}, For[i = 1, i <= 10^6, i++, f[i]]] (* user-localized i *) Compute some data: For[i = 1, i <= 10, i++, Print[Sin[0.1 i]]]; data = Table[Sin[0.1 i], {i, 10}]; data // TableForm Note that the data is not stored in the For loop above, which is not at all a smart way to compute data, but I've seen it done often. Below is the typical way one would compute data. For the for-loop way, you first declare/allocate an array, and then fill it with values. With Table[], it's all handled for you and very efficiently. (data = ConstantArray[0., 10^6]; (* pre-allocate array *) For[i = 1, i <= 10^6, i++, data[[i]] = Sin[0.1 i]];) // AbsoluteTiming data = Table[Sin[0.1 i], {i, 10^6}]; // AbsoluteTiming (* Out[]= {2.61934, Null} {0.072018, Null} *) The time difference is staggering.One reason For is less efficient is that it is a very general scheme. Any expression may be an iterator (3rd argument). The most common uses, however, are the ones shown (to iterate over a range of integers or to step through a list). Do and Table are optimized for these tasks. Personally, I've always felt For was mainly a convenience for translating C code (etc.) to Mathematica. Its greater generality does open the possibility that there might be some computations that are more naturally expressed with For. Maybe.