Đây chỉ là một phiên bản đa thức :
arcsin( x ) = x +12x33+1 ⋅ 32 ⋅ 4x55+1 ⋅ 3 ⋅ 52 ⋅ 4 ⋅ 6x77
function y = arcsin_test3(x)
y = x.*(1+x.*x.*(1/6+ x.*x.*(3/(2*4*5) + x.*x.*((1*3*5)/(2*4*6*7)))))
endfunction
có vẻ như có năm bội số (giả sử bạn có thể lưu kết quả của x.*x
) và ba lần bổ sung.
Và scilab
cốt truyện là:
Top là scilab
's asin
vs thế này, phía dưới là lỗi giữa hai người.
Câu trả lời gốc
Căn bậc hai ở đây có thể là một rắc rối, nhưng tôi nghĩ tôi sẽ viết nó lên vì nó trông giống như niềm vui. :-)
Trang này gợi ý:
từ trang 81 của Sổ tay về các hàm toán học, của Milton Abramowitz và Irene Stegun:
arcsin( x ) = π/ 2-1 - x-----√(một0+một1* x +một2*x2+một3*x3) ,
Ở đâu
một0= 1.5707288một1= - 0,2121144một2= 0,0742610một3= - 0,0187293
Tôi đã thực hiện điều này scilab
và nó hoạt động tốt, ngoại trừ xung quanhx = - 1. Chỉ phản ánh0 ≤ x ≤ 1 qua - 1 ≤ x ≤ 0 làm cho một xấp xỉ tốt hơn nhiều.
Các chương trình âm mưu đầu scilab
s'asin
chức năng so với xấp xỉ trên (màu đỏ nét đứt) chống lại sự thay đổi của tôi trong màu xanh lá cây.
Biểu đồ phía dưới hiển thị lỗi cho thay đổi của tôi (vẽ sơ đồ đó và bản gốc trên cùng một trục có nghĩa là màu xanh lá cây trông như không ở mọi nơi).
// 25770
function y = arcsin_test(x)
a0 = 1.5707288
a1 = -0.2121144
a2 = 0.0742610
a3 = -0.0187293
xx = abs(x)
y = %pi/2 - sqrt(1-x).*(a0 + a1*x + a2.*x.*x + a3.*x.*x.*x)
endfunction
function y = arcsin_test2(x)
a0 = 1.5707288
a1 = -0.2121144
a2 = 0.0742610
a3 = -0.0187293
xx = abs(x)
y = %pi/2 - sqrt(1-xx).*(a0 + a1*xx + a2.*xx.*xx + a3.*xx.*xx.*xx)
y = y.*sign(x);
endfunction
x = [-1: .0100001 : 1];
clf
subplot(211)
plot(x,arcsin_test2(x),'g.');
plot(x,arcsin_test(x),'r:');
plot(x,asin(x))
subplot(212)
//plot(x,(arcsin_test(x) - asin(x)),'r:')
plot(x,(arcsin_test2(x) - asin(x)),'g.')