===== Numerical integration =====
Numeric integration of symbolic expressions is performed in **newRPL** via the ''[[manual:chapter6:solvers:cmd_numint|NUMINT]]'' command which implements the [[https://en.wikipedia.org/wiki/Adaptive_Simpson%27s_method|Adaptive Simpson's method]].
''[[manual:chapter6:solvers:cmd_numint|NUMINT]]'' accepts four arguments:
* the mono-variate function to integrate, either in __symbolic__ or __program__ form;
* the lower integration limit;
* the upper integration limit;
* the error tolerance.
If the **function** to integrate is expressed in symbolic form it must respect a precise syntax:
* it must be written as an equation;
* the left side must be in the form ''//func//(//var//)'' where ''//var//'' is the integrating variable and ''//func//'' is the function's name;
* the right side is a function, expressed in terms of ''//var//''.
For example valid expressions are:
'F(X)=X*LN(X)'
'G(Z)=Z^2-2*COS(Z)'
'VEL(T)=ACC*T'
As shown above, the functions may refer to global or local variables; the function's name is only descriptive and bears no relevance to the calculation.
Alternatively, the function can be written as a program which __accepts exactly one numeric argument and returns exactly one numeric result__. The expressions above can be rewritten as:
« DUP LN * »
« DUP SQ SWAP COS 2 * - »
« 'ACC' RCL * »
The **integration limits** can be either real or complex __finite__ numbers; symbolic constants are accepted and silently converted to numerical values.
The **error tolerance** is a real number used to specify the required precision of the calculation: when two successive iterations differ by a value which is less than the tolerance the calculation stops.
----
==== Angles and trigonometric expressions ====
When a real number is input to a trigonometric function **newRPL** assumes that it is an angle expressed in the current angular mode; however the trigonometric functions are meant to process quantities expressed in radians. In other words the following transformations are implicitly applied:
* in ''[[manual:chapter6:flags:cmd_rad|RAD]]'' mode $ θ=θ_{r}\, $;
* in ''[[manual:chapter6:flags:cmd_deg|DEG]]'' mode $ θ=\frac{\pi}{180}{θ_°}\, $;
* in ''[[manual:chapter6:flags:cmd_grad|GRAD]]'' mode $ θ=\frac{\pi}{200}{θ_g}\, $.
where $θ_{r}\,$, $θ_{°}$ and $θ_{g}$ are the quantities entered by the user and $θ$ is what is actually fed to the trigonometric functions.
From this, two important consequences derive:
- the antiderivative changes according to the angular mode. Let's consider e.g. the function $ f(θ)=\sin{θ} $ and apply the transformations above:\\ \\
* in ''[[manual:chapter6:flags:cmd_rad|RAD]]'' mode $ f(θ_r) $ is equivalent to $ f(θ) $ which differentiates to $ f(θ_r)\,dθ_r=\sin{θ}\,d{θ} $ and whose antiderivative is $ F(θ)=-\cos{θ}\, $;
* in ''[[manual:chapter6:flags:cmd_deg|DEG]]'' mode $ f(θ_°) $ is actually $ f\left(\frac{\pi}{180}θ_°\right) $ which differentiates to $ f\left(\frac{\pi}{180}θ_°\right)\,dθ_°=\frac{180}{\pi}\sin{θ}\,d{θ} $ and whose antiderivative is $ F(θ)=-\frac{180}{\pi}\cos{θ}\, $;
* in ''[[manual:chapter6:flags:cmd_grad|GRAD]]'' mode $ f(θ_g) $ is actually $ f\left(\frac{\pi}{200}θ_g\right) $ which differentiates to $ f\left(\frac{\pi}{200}θ_g\right)\,dθ_g=\frac{200}{\pi}\sin{θ}\,d{θ} $ and whose antiderivative is $ F(θ)=-\frac{200}{\pi}\cos{θ}\, $;\\ \\
- no inverse transformation is applied to the resulting output: this is mathematically correct, but can be disconcerting if one is not immediately aware of the implicit variable substitution.
\\
In conclusion, unless the user knows exactly what he/she is doing it's advisable **to perform numeric integration of trigonometric expressions in ''[[manual:chapter6:flags:cmd_rad|RAD]]'' mode**.
----
==== Example 1: Bounded function on closed interval ====
| pic | $$ \int^{2}_{0} x^{10}e^{\left(4x^{3}-3x^{4}\right)} \,dx $$ | **Input:**\\ 16 SETPREC
'F(X)=X^10*EXP(4*X^3-3*X^4)'
0
2
tol
NUMINT
||
| ::: | tol=10-4 | **7.258 3**76 114 514 225 ... | %%|Δ|%% = 1.9·10-5 |
| ::: | tol=10-8 | **7.258 395 17**3 115 920 ... | %%|Δ|%% = 2.5·10-9 |
| ::: | tol=10-12 | **7.258 395 170 61**5 141 ... | %%|Δ|%% = 8.5·10-13 |
| ::: | tol=10-16 | **7.258 395 170 614** 323 ... | %%|Δ|%% = 3.2·10-14 |
| ::: | Truncated at 16 digits | **[[https://www.wolframalpha.com/input/?i=integrate+x%5E10*exp%284*x%5E3-3*x%5E4%29+from+0+to+2+to+16+digits|7.258 395 170 614 291]]** ... | |
This integral is interesting because the shape of the function in the interval is flat almost everywhere except for a narrow peak which is however captured by the algorithm.
----
==== Example 2: XXX ====
----
==== Example 3: XXX ====
----
==== Example 4: XXX ====