Simpson's-Rule

3 visualizaciones (últimos 30 días)
Dana King
Dana King el 9 de Mayo de 2019
Comentada: Dana King el 9 de Mayo de 2019
Dear all,
as homework we are supposed to program the simpson's rule for f(x)=sin(x)=2 in the interval [0,pi]. Beneath you can see the code my classmate and I created. The problem is when we run it, it doesn't end. Whenever we stop the progam it's in the line with '!!!!!!!!!!!'. Does anybody know why it's not working ?
Best Regards
%Übung3
%Simpson-Regel
%Die Funktion ist sin(x) im Interval 0 bis pi
% Fehlerbereich in 0 Umgebung
eps=10^-6;
%Lösung
Re=2;
%Startwerte
x0=0;
x1=pi;
%Anzahl der Schritte
k=0;
n=2^k;
m=1;
%Definition des Integralintervall
deltax=x1/n;
%Hier initialisieren wir unsere berechente Lösung
fRe=0;
%Definiton der funktion f0
f0=sin(x0);
%Ab hier nutzen wir wieder eine while Schleife für das Aufsummieren bis wir
%die gewünschte Genauigkeit erreichen
while fRe < Re-eps || fRe > Re+eps
%Erhöhung von k bei jedem Durchgang um eins
k=k+1;
%Variabeln die wir benötigen für die Summe
n=2*m;%definition aus dem Skript
deltax=x1/n;
%Löschung der f_sum vom vorherigen Durchlauf
f_sum=0;
%Berechnung der Summe mithilfe der Simpson-Regel
for i=0:(m-1);
!!!!!! f1=4*sin(x0+((2*i+1)*deltax));
f2=sin(x0+((2*i+2)*deltax));
f_sum=f_sum+f0+f1+f2;
f0=f2;
end
%Multiplikation mit dem Vorfaktor Deltax/3 für das Endergebnis
fsum=(deltax/3)*f_sum;
%Jetzt verdoppeln wir unser Intervall bis die Lösung in der gewünschten
%Genauigkeit vorliegt
m=2*m;
%Erstellung des Ergebnisvektors für jeden Schrit
vec_f(k)=fsum;
%Fehler für den jeweiligen Schritt
err(k)=Re-fsum;
%Erstellung des deltaxvektors für jeden Schritt
vec_deltax(k)=deltax;
end
%Erstellung der Werte für das Verhältnis vom nachfolgenden zum vorherigen
%Fehler
Vn=NaN(length(err),1);
for i=1:length(err)-1
Vn(i)=(err(i+1))/(err(i));
end
% %Erstellen einer Tabelle zur Darstellung der berechneten Werte
% s=transpose(1:k);
% vec_f= transpose(vec_f) ;
% intervall(s)= (2.^s);
% intervall=transpose(intervall) ;
% err=transpose(err) ;
% Tabelle= table(s, intervall,vec_f, err, Vn) ;
% Tabelle.Properties.VariableNames={'Schritt' 'Intervall' 'Auswertung' 'Fehler' 'Fehlerverhaeltnis'} ;
% writetable(Tabelle,'SimpsonRegel.csv');
  1 comentario
KSSV
KSSV el 9 de Mayo de 2019
YOur fRe, Re is not getting updated...they are awlays fixed........how do you expect it to comeout of while loop?

Iniciar sesión para comentar.

Respuestas (1)

Alex Mcaulley
Alex Mcaulley el 9 de Mayo de 2019
The while loop never ends because the contidion is never satisfied. The problem is that Re and fRe don't change inside the loop and keep their initial values (Re = 2;fRe = 0). At least one of the variables should be updated in each iteration
while fRe < Re-eps || fRe > Re+eps
  1 comentario
Dana King
Dana King el 9 de Mayo de 2019
Thank you for your help. :)

Iniciar sesión para comentar.

Categorías

Más información sobre Statistics and Machine Learning Toolbox en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by