Plot Fourier Series from a variable

8 views (last 30 days)
Andres De Leon on 18 Nov 2021
Answered: Paul on 18 Nov 2021
I have this program which calculates the Fourier Series of a function. In this case the function is just f(t)=x. It makes the calculation correctly, and it can compute as many terms of the series as I want (in this case only 5 terms). However, I can not plot the series because the whole series is stored in the variable sys_sum. Can someone please help me plotting the series?
Code:
clc; clear all; close all;
syms x k L n
evalin(symengine,'assume(k,Type::Integer)');
%Obtain an and bn
a = @(f,x,k,L) int(f*cos(k*pi*x/L)/L,x,-L,L);
b = @(f,x,k,L) int(f*sin(k*pi*x/L)/L,x,-L,L);
%Fourier Series is calculated
fs = @(f,x,n,L) a(f,x,0,L)/2 + ... %a0/2 a0=an in the interation number 0 [k or n = 0]
symsum(a(f,x,k,L)*cos(k*pi*x/L) + b(f,x,k,L)*sin(k*pi*x/L),k,1,n); %+an*cos(nwt)+bn*sin(nwt)
f = x %Function
pretty(fs(f,x,5,pi)); %fs(f(t), x, n, T) ----- fs(function, variable x, number of terms, period)
sys_sum = fs(f,x,5,pi);

Paul on 18 Nov 2021
The easiest way would be to use fplot(). Also, use assume() instead of evalin
syms x k L n
% evalin(symengine,'assume(k,Type::Integer)');
assume(k,'integer')
assume(n,'integer')
%Obtain an and bn
a = @(f,x,k,L) int(f*cos(k*pi*x/L)/L,x,-L,L);
b = @(f,x,k,L) int(f*sin(k*pi*x/L)/L,x,-L,L);
%Fourier Series is calculated
fs = @(f,x,n,L) a(f,x,0,L)/2 + ... %a0/2 a0=an in the interation number 0 [k or n = 0]
symsum(a(f,x,k,L)*cos(k*pi*x/L) + b(f,x,k,L)*sin(k*pi*x/L),k,1,n); %+an*cos(nwt)+bn*sin(nwt)
f = x %Function
f =
x
pretty(fs(f,x,5,pi)); %fs(f(t), x, n, T) ----- fs(function, variable x, number of terms, period)
sin(3 x) 2 sin(4 x) sin(5 x) 2 ---------- - sin(2 x) - -------- + ---------- + 2 sin(x) 3 2 5
sys_sum = fs(f,x,5,pi);
fplot(sys_sum) R2018a

Community Treasure Hunt

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

Start Hunting!