%% TMA671 Lösning av uppgift N.2.44 % Under storgruppsövningen som hölls onsdagen den 23e April 2018 % så demonstrerades uppgift 15 i Kapitel 2 i Numerisk Analys % boken. Uppgiften handlar om att approximera Runges funktion % dels med hjälp av interpolation med dessutom med splines % Programmet är skrivet av Johannes Borgqvist clc,clear; % Definiera en kontinuerlig variabel med 100 punkter xKont = linspace(-1,1,1000)'; %% Förarbete: generella funktioner n = 100; % Allokera minne for nio punkter och dess data x = zeros(n+1,1); % Punkter y = zeros(n+1,1); % Data % Generera uniformt fördelade punkte i intervallet [-1,1] for i = 0:n x(i+1,1) = -1 + (2/n) * i; end % Skapa ett handtag för Runges funktion R =@(t) ((1)./(1+(25.*t.^2))); %% Deluppgift (a): Generera datapunkter och plotta dessa y = R(x); % Vi plottar i vår Figur fig = figure(1); %fig = figure('units','normalized','outerposition',[0 0 1 1],... % 'PaperPositionMode','auto'); clf plot(x,y,'*black','Linewidth',10) hold on %% Deluppgift (b): Anpassa ett polynom av grad 8 med polyfit i Matlab, rita ut polunomet med polyval och plot % Anpassa polynomet av grad 8 och få ut koefficienterna c = polyfit(x,y,100); % Få ut värdet på polynomet med polyval yInterpolation = polyval(c,xKont); % Plotta interpolationspolynomet av grad 8 plot(xKont,yInterpolation,'red','Linewidth',2); hold on %% Deluppgift (c): Anpassa en spline till punkterna med spline och plotta % Anpassa en kubisk spline ySpline = spline(x,y,xKont); plot(xKont,ySpline,'blue','Linewidth',2); hold on %% Deluppgift (d): Vilken av anpassningarna stämmer bäst överens med den underliggande funktionen % Vi definierar den underliggande funktionen med många mätpunkter rungeRiktig = R(xKont); % Vi definierar interpolationsfelet med hjälp av euklidisk längd felInterpolation = sqrt((rungeRiktig - yInterpolation)' * (rungeRiktig - yInterpolation)); % Vi definierar splinefelet med hjälp av euklidisk längd felSpline = sqrt((rungeRiktig - ySpline)' * (rungeRiktig - ySpline)); % Vi plottar även den riktiga kurvan plot(xKont,rungeRiktig,'--black','Linewidth',2); hold on % Vi skriver ut detta i våra legends så att vi får svaret på frågan leg = legend('M\"{a}tdata',... ['Fel interpolation$=',num2str(felInterpolation),'$'],... ['Fel spline$=',num2str(felSpline),'$'],... ['Runges funktion $R(x)$']); % Snygga till legend set(leg,'interpreter','latex','Fontsize',30,'Location','South'); %% Städa upp och fixa till plotten ordentligt grid on set(gca,'Ticklabelinterpreter','latex','Fontsize',20) axis([-1,1,-1.5,1.5]) %axis([-1,1,-12,5]) xlabel('Variabel, $x$','interpreter','latex','Fontsize',40) ylabel('Funktionsv\"{a}rde, $f(x)$','interpreter','latex','Fontsize',40) titleStr = {'\textbf{TMA671 Uppgift N.3.15}','Datum: 2018-04-23, Skriven av: Johannes Borgqvist',... ['\textit{Approximationer av Runges funktion av ordning:}$\;\;\;n=',num2str(n),'$'],... }; title(titleStr,'interpreter','latex','Fontsize',50) %print(fig, '-depsc', '-r300', ['UppgiftN215Datum20180419with',num2str(n),'Nodes.eps'])