Ich weiß nicht, die genaue Art und Weise, dass Matlab sin(x)
berechnet - aber Sie können dies untersuchen, indem sie mit Hilfe der Potenzreihe zu berechnen, dh
sin x = x - (x^3)/3! + (x^5)/5! - (x^7)/7! + (x^9)/9! ...
Drehen dieses in eine Matlab-Code wir vertreten durch:
clc
x = pi; % or x = pi/2
res = x;
factor = -1;
for ii=3:2:19
res = res + factor*power(x,ii)/factorial(ii);
factor = factor*-1;
fprintf ('iteration %2i sin(x)=%1.16f\n', (ii-1)/2, res);
end
res
Ausführen dieses Code für beide x=pi
und x=pi/2
können Sie sehen, dass die x=pi/2
auf das richtige Ergebnis konvergiert (im eps-Fehler) recht schnell (9 Iterationen) - während die x=pi
Fall konvergiert nicht im selben Zeitrahmen.
Es ist nützlich zu beachten, dass bei 9 Iterationen die letzte Fakultät, die in Fakultät (19) berechnet wird. Der nächste Faktor, der in dieser Sequenz berechnet wird, ist 21. Dies ist der letzte Faktor, der aufgrund der doppelten Genauigkeit mit 100% Genauigkeit dargestellt werden kann (siehe help factorial
).
Also ich denke, was passiert ist, dass für Pi/2 die mathematische Lösung auf 1 bis innerhalb der doppelten Präzision schneller, dass der Pi Fall konvergiert. Tatsächlich kann der Pi-Fall aufgrund von Einschränkungen in der Mathematik und der Genauigkeit, die in einem Ergebnis mit doppelter Genauigkeit gespeichert werden können, nicht vollständig konvergieren.
Nach alledem, dass die sin(pi)
innerhalb eps
ist, sollten Sie diese Tatsache für Ihre Zwecke verwenden.
Ich habe die Ergebnisse, die ich unten bekommen kopiert (R2015b):
Results for PI/2
iteration 1 sin(x)=0.9248322292886504
iteration 2 sin(x)=1.0045248555348174
iteration 3 sin(x)=0.9998431013994987
iteration 4 sin(x)=1.0000035425842861
iteration 5 sin(x)=0.9999999437410510
iteration 6 sin(x)=1.0000000006627803
iteration 7 sin(x)=0.9999999999939768
iteration 8 sin(x)=1.0000000000000437
iteration 9 sin(x)=1.0000000000000000
Final Result: 1.0000000000000000
Results for PI
iteration 1 sin(x)=-2.0261201264601763
iteration 2 sin(x)=0.5240439134171688
iteration 3 sin(x)=-0.0752206159036231
iteration 4 sin(x)=0.0069252707075051
iteration 5 sin(x)=-0.0004451602382092
iteration 6 sin(x)=0.0000211425675584
iteration 7 sin(x)=-0.0000007727858894
iteration 8 sin(x)=0.0000000224195107
iteration 9 sin(x)=-0.0000000005289183
Final Result: -0.0000000005289183
Es ist nicht genau 1, aber der Fehler ist eigentlich zu klein, um dargestellt zu werden. –
Aber Matlab zeigt genau 1. –
versuchen Sie 'sin (sym ('pi'))' und sehen Sie http://www2.math.umd.edu/~jmr/241/introsession.html – Malick