0

Я попытался вычислить это:Как рассчитать выражения в большей точности

limit(x^5−6*x^4+14*x^3−20*x^2+24*x−16, x, 1.999993580023622); 

Но я получил 0. Я думаю, что это происходит из-за потери значимости. Что я могу сделать, чтобы получить более точный результат?

+1

На каком языке это? Что делает 'limit'? – Jubobs

+0

@Jubobs [Maxima] (http://maxima.sourceforge.net). –

+0

@RobertDodier Спасибо. Я не знал, что тег [tag: maxima] относится к чему-то, кроме математической концепции. – Jubobs

ответ

1

(1) использовать horner, чтобы изменить выражение таким образом, чтобы его можно было более точно оценивать.

(%i1) display2d : false; 
(%o1) false 
(%i2) horner (x^5-6*x^4+14*x^3-20*x^2+24*x-16, x); 
(%o2) x*(x*(x*((x-6)*x+14)-20)+24)-16 
(%i3) subst (x=1.999993580023622, %); 
(%o3) -1.77635683940025E-15 

(2) использовать арифметику bigfloat (variable precision).

(%i4) subst (x=1.999993580023622b0, x^5-6*x^4+14*x^3-20*x^2+24*x-16); 
(%o4) -1.332267629550188b-15 
(%i5) fpprec : 50 $ 
(%i6) fpprintprec : 8 $ 
(%i7) subst (x=1.999993580023622b0, x^5-6*x^4+14*x^3-20*x^2+24*x-16); 
(%o7) -1.5876314b-15 

(3) использовать рациональную арифметику, которая является точной.

(%i2) rat (1.999993580023622); 
rat: replaced 1.999993580023622 by 38317775/19158949 = 1.999993580023622 
(%o2) 38317775/19158949 
(%i3) subst (x=38317775/19158949, x^5-6*x^4+14*x^3-20*x^2+24*x-16); 
(%o3) -4098340979864306910009/2581418432543842245350194942774769749 
(%i4) float (%); 
(%o4) -1.587631407677531E-15 
+0

Большое спасибо, это действительно помогло мне! – Mickey

Смежные вопросы