3 ms·
The custom solver is really neat too > In order to show the steps, the calculator applies the same integration techniques that a human would apply. The program
by lupire 3y ago
The custom solver is really neat too
> In order to show the steps, the calculator applies the same integration techniques that a human would apply. The program that does this has been developed over several years and is written in Maxima's own programming language. It consists of more than 17000 lines of code. When the integrand matches a known form, it applies fixed rules to solve the integral (e. g. partial fraction decomposition for rational functions, trigonometric substitution for integrands involving the square roots of a quadratic polynomial or integration by parts for products of certain functions). Otherwise, it tries different substitutions and transformations until either the integral is solved, time runs out or there is nothing left to try. The calculator lacks the mathematical intuition that is very useful for finding an antiderivative, but on the other hand it can try a large number of possibilities within a short amount of time. The step by step antiderivatives are often much shorter and more elegant than those found by Maxima.
- nsajko 3y agoThis is known as rule-based integration. Here's a powerful system of such rules: https://rulebasedintegration.org/integrationRules.html https://rulebasedintegration.org/integrationRules.html
- wiz21c 3y agoDoes one know if mathematica uses that too ? I rememebr an HN post where one could see that sympy, maxima and the likes where way behind for a lot of more peculiar integrals.. ah the comparison is here : https://www.12000.org/my_notes/CAS_integration_tests/index.htm https://www.12000.org/my_notes/CAS_integration_tests/index.h... (and posted by other on this very thread...)
- pkaye 3y agoThere is a go implementation of a CAS which syntax similar to Mathematica which uses this rules based integration library. https://github.com/corywalker/expreduce https://github.com/corywalker/expreduce