How to create a Fourier series using for loops

11 views (last 30 days)
I am supposed to plot this function on matlab along with another function. I have tried using for loops to create this, I am new to matlab and I don't know what I am doing wrong. Could someone point me in the right direction please? the range for x is from -2 to 2 and NUM is 14
f_init = repelem(0.5,401)
f_approx = (2/((k^2)*(pi^k)))*((-1^k)-1)*cos(k*((pi*x)/2))+(2/(pi*k))*(-1^(k+1))*sin(k*(pi*x/2));
t= length(x)
for k=1:14
for x=-2:0.01:2
F(x) = f_init(t)+ f_approx(k);
end
end
plot(F);

Accepted Answer

Torsten
Torsten on 2 Oct 2022
Edited: Torsten on 2 Oct 2022
k = 1:14;
x = (-2:0.01:2).';
f = 0.5 + sum(2./(k.^2*pi^2).*((-1).^k-1).*cos(pi*k.*x/2) + 2./(k*pi).*(-1).^(k+1).*sin(pi*k.*x/2),2);
plot(x,f)
f is a (401x14) matrix with row i made up of the k terms of the Fourier series, evaluated at x(i).
  3 Comments
Ross King
Ross King on 2 Oct 2022
what does the " . ' " part do? So there are k rows in the f matrix and you add all the terms in the x(ith) column together? What does the dot after the k do in the sum part of your function? I am confused about the why you've put periods in your function.
Torsten
Torsten on 2 Oct 2022
.^, ./ and .* are elementwise operations for vectors and matrices being potentiated, divided or multiplied.
This is in contrast to matrix operations.
Look what comes out if you try
a = [1 2 3];
b = [4 5 6];
a.^b
ans = 1×3
1 32 729
a./b
ans = 1×3
0.2500 0.4000 0.5000
a.*b
ans = 1×3
4 10 18
or
(a.').^b
ans = 3×3
1 1 1 16 32 64 81 243 729
(a.')./b
ans = 3×3
0.2500 0.2000 0.1667 0.5000 0.4000 0.3333 0.7500 0.6000 0.5000
(a.').*b
ans = 3×3
4 5 6 8 10 12 12 15 18
For further information, see

Sign in to comment.

More Answers (0)

Categories

Find more on Fourier Analysis and Filtering in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!