%% TMA671 Lösning av uppgift L.2.44 % Under storgruppsövningen som hölls onsdagen den 28e Mars 2018 % så demonstrerades uppgift 44 i Kapitel 2 i Linjär Algebra % boken. Uppgiften handlar om att approximera en linjär funktion % med hjälp av dess Fourierserie, och här är ett litet skript för % att illustrera hur antalet termer påverkar nogrannheten hos % approximationen. % Programmet är skrivet av Johannes Borgqvist %% Beräkning av analytisk lösning % Variabel för funktionen t = linspace(0,2*pi,400)'; % Den analytiska funktionen vi vill approximera f = 2*pi-t; %% En snygg loop för att interagera med användaren nuOfTerms = input('Ange antal termer i Fourierserien:\n'); % Vi introducerar lite index för att avbryta "while"-loopen irritationTooMuch = 4; breakedOnce = false; terminationIndex = 0; % "While"-loopen pågår tills användaren anger ett korrekt antal termer while ~isnumeric(nuOfTerms) nuOfTerms = input('Igen...Ange antal termer i Fourierserien:\n'); while floor(nuOfTerms) ~= nuOfTerms nuOfTerms = input('Igen...Ange antal termer i Fourierserien:\n'); if terminationIndex > irritationTooMuch disp('Tyvärr du misslyckades, programmet terminerar!'); breakedOnce = true; break; end terminationIndex = terminationIndex + 1; end terminationIndex = terminationIndex + 1; if terminationIndex > irritationTooMuch && breakedOnce == false disp('Tyvärr du misslyckades, programmet terminerar!'); break; end end %% Beräkning av Fourier-serie % Beräkna Fourier serien med hjäp av två loopar: % första över antalet tidpunkter och andra för att beräkna summan % vid varje tidpunkt Fourier = ones(size(f)); for index = 1:length(Fourier) Fourier(index) = pi; for innerIndex = 1:nuOfTerms Fourier(index) = Fourier(index) + (2/innerIndex) * sin(innerIndex * t(index)); end end %% Plottning av approximation och analytisk lösning axisDelta = 0.7; figure(1) clf plot(t,f,'red') hold on plot(t,Fourier,'blue') grid on axis([0, 2*pi + axisDelta/10, 0 - axisDelta, 2*pi + axisDelta]) hold off leg = legend('$f(t)=2\pi-t$','$\hat{f}_{n}(t)=\pi+2\sum_{i=1}^{n}\frac{1}{i}\,\mathrm{sin}\left(i\cdot t\right)$'); set(leg,'interpreter','latex','Location','NorthEast','Fontsize',40) ax = gca; xtickVector = [0, pi/2, pi, ((3*pi)/(2)), 2*pi]; set(ax,'Ticklabelinterpreter','latex','Fontsize',40,'XTick',xtickVector,... 'XTickLabel',{'$0$','$^{\pi}/_{2}$', '$\pi$','$^{3\pi}/_{2}$','$2\pi$'},... 'YTick',xtickVector,... 'YTickLabel',{'$0$','$^{\pi}/_{2}$', '$\pi$','$^{3\pi}/_{2}$','$2\pi$'}) xlabel('Variabel, $t$','interpreter','latex','Fontsize',40) ylabel('Funktionsv\"{a}rde, $f(t)$','interpreter','latex','Fontsize',40) titleStr = {'\textbf{TMA671 Uppgift L.2.44}','Datum: 2018-03-28, Skriven av: Johannes Borgqvist',... ['\textit{Fourierapproximation av ordning:}$\;\;\;n=',num2str(nuOfTerms),'$'],... }; title(titleStr,'interpreter','latex','Fontsize',50)