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!