Tôi không biết một cách chính xác rằng Matlab tính toán sin(x)
- nhưng bạn có thể điều tra này bằng cách tính toán nó bằng cách sử dụng chuỗi lũy thừa, tức là
sin x = x - (x^3)/3! + (x^5)/5! - (x^7)/7! + (x^9)/9! ...
Biến này vào một số mã Matlab chúng tôi đại diện nó bằng cách:
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
Chạy mã này cho cả x=pi
và x=pi/2
bạn có thể thấy rằng x=pi/2
hội tụ vào kết quả chính xác (trong vòng lỗi eps) khá nhanh (9 lần lặp) - trong khi x=pi
trường hợp không hội tụ trong cùng một khung thời gian.
Điều hữu ích cần lưu ý là tại 9 lần lặp lại giai thừa cuối cùng được tính toán trong giai thừa (19). Giai thừa tiếp theo sẽ được tính toán trong chuỗi này là 21. Đây là giai thừa cuối cùng có thể được biểu diễn với độ chính xác 100% do độ chính xác gấp đôi (xem help factorial
). Vì vậy, tôi nghĩ rằng những gì đang xảy ra là đối với pi/2, giải pháp toán học hội tụ trên 1 đến trong chính xác gấp đôi nhanh hơn là trường hợp pi. Trong thực tế, trường hợp pi không thể hội tụ hoàn toàn do những hạn chế trong toán học và độ chính xác có thể được lưu trữ trong một kết quả chính xác gấp đôi.
Có nói rằng tất cả các sin(pi)
là trong vòng eps
vì vậy bạn nên sử dụng thực tế đó cho các mục đích của bạn.
tôi đã sao chép kết quả tôi nhận được bên dưới (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
Không chính xác 1 nhưng lỗi thực sự quá nhỏ để được thể hiện. –
Nhưng MATLAB hiển thị chính xác 1. –
thử 'sin (sym ('pi'))' và xem http://www2.math.umd.edu/~jmr/241/introsession.html – Malick