Simpson's-Rule
3 次查看(过去 30 天)
显示 更早的评论
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 个评论
KSSV
2019-5-9
YOur fRe, Re is not getting updated...they are awlays fixed........how do you expect it to comeout of while loop?
回答(1 个)
Alex Mcaulley
2019-5-9
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
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Statistics and Machine Learning Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!