Одно из преимуществ maxima
по сравнению с Mathematica
состоит в том, что численное интегрирование в maxima
осуществляется стандартными процедурами из пакета quadpack
.
Простейший случай: интегрирование регулярной функции на конечном промежутке со стандартной точностью:
quad_qag(1/(P^2+1),P,0,1,2);
Иногда стандартной точности не хватает. В качестве примера посчитаем с обычной точностью интеграл
quad_qag((1-1/(1+P^10))/P^10,P,0,1,2);
результат: [.9134073313385825, 4.5694511233777946e-5, 8379, 1]
большое число итераций (8379), а также код завершения (1) указывают на проблемы.
Теперь пересчитаем этот же интеграл с высокой точностью:
keepfloat:true$ fpprec:45$ podYntExpr:(1-1/(1+P^10))/P^10;
результат:
podYntVyr(Pv):=(mode_declare([function(podYntVyr),Pv], bfloat), float(block([P], P:bfloat(Pv), ''podYntExpr)));
quad_qag('podYntVyr,P,0,1,2);[.9380942870328848, 3.736859212248504e-12, 63, 0]