How to create a Fourier series using for loops

14 visualizzazioni (ultimi 30 giorni)
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);

Risposta accettata

Torsten
Torsten il 2 Ott 2022
Modificato: Torsten il 2 Ott 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 Commenti
Ross King
Ross King il 2 Ott 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 il 2 Ott 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

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by