%% Abbruch bei Reihenentwicklung % Berechnung des Wertes der Reihe sum(1/k!) --> e % bis Folgenglieder relativ (bzgl. des Wertes) kleiner als epsilon sind % oder eine max. Anzahl von Summanden überschritten ist. clc; clear; %reihen_wert = pi*pi/6; % exakter Wert eps = 1e-6; % relative Abbruchgenauigkeit n_max = 1000; % höchstes verwendetes Folgenglied %% FOR-loop mit a priori festgelegter Anzahl der Durchlaeufe, mit % Fakultaet tic summe = 0; % Summe for k=0:n_max ak = 1/factorial(k); % aktueller Summand (Folgenglied) summe = summe + ak; % aktuelle Summe (Partialsumme) end time1 = toc; disp(['Summe_1 = ',num2str(summe),' nach ',num2str(n_max),' Iterationen' ]); disp(['absoluter Fehler: ',num2str(exp(1)-summe)]); disp(['Zeit: ',num2str(time1),' sec.']); %% FOR-loop mit a priori festgelegter Anzahl der Durchlaeufe, keine % Fakultaet tic summe = 0; % Summe ak = 1; % a_0, erster Summand for k=0:n_max summe = summe + ak; % aktuelle Summe (Partialsumme) ak = ak/(k+1); % naechster Summand end time2 = toc; disp(['Summe_2 = ',num2str(summe),' nach ',num2str(n_max),' Iterationen' ]); disp(['absoluter Fehler: ',num2str(exp(1)-summe)]); disp(['Zeit: ',num2str(time2),' sec.']); %% WHILE-loop mit Abbruchbedingung (relative Groesse des Folgengliedes) % (Wert der Reihe wird als unbekannt angenommen) tic k = 1; summe = 1; % Summe mit a_0 initialisieren ak = 1/k; % a_1, zweiter Summand while abs(ak)>=eps*summe % while ak>eps*summe summe = summe + ak; % aktuelle Summe (Partialsumme) k = k+1; ak = ak/k; % naechster Summand end time3 = toc; disp(['Summe_3 = ',num2str(summe),' nach ',num2str(k-1),' Iterationen' ]); disp(['absoluter Fehler: ',num2str(exp(1)-summe)]); disp(['Zeit: ',num2str(time3),' sec.']);