# NAG Library Function Documentnag_fresnel_s_vector (s20aqc)

## 1  Purpose

nag_fresnel_s_vector (s20aqc) returns an array of values for the Fresnel integral $S\left(x\right)$.

## 2  Specification

#include <nag.h>
#include <nags.h>

void  nag_fresnel_s_vector (Integer n, const double x[], double f[],  NagError *fail)

## 3  Description

nag_fresnel_s_vector (s20aqc) evaluates an approximation to the Fresnel integral

$Sxi=∫0xisinπ2t2dt$
for an array of arguments ${x}_{\mathit{i}}$, for $\mathit{i}=1,2,\dots ,n$.
Note:  $S\left(x\right)=-S\left(-x\right)$, so the approximation need only consider $x\ge 0.0$.
The function is based on three Chebyshev expansions:
For $0<x\le 3$,

$Sx=x3∑′r=0arTrt, with ​ t=2 x3 4-1.$
For $x>3$,

$Sx=12-fxxcosπ2x2-gxx3sinπ2x2 ,$
where $f\left(x\right)=\underset{r=0}{{\sum }^{\prime }}\phantom{\rule{0.25em}{0ex}}{b}_{r}{T}_{r}\left(t\right)$,
and $g\left(x\right)=\underset{r=0}{{\sum }^{\prime }}\phantom{\rule{0.25em}{0ex}}{c}_{r}{T}_{r}\left(t\right)$,
with $t=2{\left(\frac{3}{x}\right)}^{4}-1$.
For small $x$, $S\left(x\right)\simeq \frac{\pi }{6}{x}^{3}$. This approximation is used when $x$ is sufficiently small for the result to be correct to machine precision. For very small $x$, this approximation would underflow; the result is then set exactly to zero.
For large $x$, $f\left(x\right)\simeq \frac{1}{\pi }$ and $g\left(x\right)\simeq \frac{1}{{\pi }^{2}}$. Therefore for moderately large $x$, when $\frac{1}{{\pi }^{2}{x}^{3}}$ is negligible compared with $\frac{1}{2}$, the second term in the approximation for $x>3$ may be dropped. For very large $x$, when $\frac{1}{\pi x}$ becomes negligible, $S\left(x\right)\simeq \frac{1}{2}$. However there will be considerable difficulties in calculating $\mathrm{cos}\left(\frac{\pi }{2}{x}^{2}\right)$ accurately before this final limiting value can be used. Since $\mathrm{cos}\left(\frac{\pi }{2}{x}^{2}\right)$ is periodic, its value is essentially determined by the fractional part of ${x}^{2}$. If ${x}^{2}=N+\theta $ where $N$ is an integer and $0\le \theta <1$, then $\mathrm{cos}\left(\frac{\pi }{2}{x}^{2}\right)$ depends on $\theta $ and on $N$ modulo $4$. By exploiting this fact, it is possible to retain significance in the calculation of $\mathrm{cos}\left(\frac{\pi }{2}{x}^{2}\right)$ either all the way to the very large $x$ limit, or at least until the integer part of $\frac{x}{2}$ is equal to the maximum integer allowed on the machine.

## 4  References

Abramowitz M and Stegun I A (1972) Handbook of Mathematical Functions (3rd Edition) Dover Publications

## 5  Arguments

1:     n – IntegerInput
On entry: $n$, the number of points.
Constraint: ${\mathbf{n}}\ge 0$.
2:     x[n] – const doubleInput
On entry: the argument ${x}_{\mathit{i}}$ of the function, for $\mathit{i}=1,2,\dots ,{\mathbf{n}}$.
3:     f[n] – doubleOutput
On exit: $S\left({x}_{i}\right)$, the function values.
4:     fail – NagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).

## 6  Error Indicators and Warnings

NE_BAD_PARAM
On entry, argument $〈\mathit{\text{value}}〉$ had an illegal value.
NE_INT
On entry, ${\mathbf{n}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{n}}\ge 0$.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.

## 7  Accuracy

Let $\delta $ and $\epsilon $ be the relative errors in the argument and result respectively.
If $\delta $ is somewhat larger than the machine precision (i.e., if $\delta $ is due to data errors etc.), then $\epsilon $ and $\delta $ are approximately related by:

$ε≃ x sin π2 x2 Sx δ.$
Figure 1 shows the behaviour of the error amplification factor $\left|\frac{x\mathrm{sin}\left(\frac{\pi }{2}{x}^{2}\right)}{S\left(x\right)}\right|$.
However if $\delta $ is of the same order as the machine precision, then rounding errors could make $\epsilon $ slightly larger than the above relation predicts.
For small $x$, $\epsilon \simeq 3\delta $ and hence there is only moderate amplification of relative error. Of course for very small $x$ where the correct result would underflow and exact zero is returned, relative error-control is lost.
For moderately large values of $x$,

$ε ≃ 2x sin π2 x2 δ$
and the result will be subject to increasingly large amplification of errors. However the above relation breaks down for large values of $x$ (i.e., when $\frac{1}{{x}^{2}}$ is of the order of the machine precision); in this region the relative error in the result is essentially bounded by $\frac{2}{\pi x}$.
Hence the effects of error amplification are limited and at worst the relative error loss should not exceed half the possible number of significant figures.
Figure 1

None.

## 9  Example

This example reads values of x from a file, evaluates the function at each value of ${x}_{i}$ and prints the results.

### 9.1  Program Text

Program Text (s20aqce.c)

### 9.2  Program Data

Program Data (s20aqce.d)

### 9.3  Program Results

Program Results (s20aqce.r)
{"extraction_info": {"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 67, "mathjax_tag": 0, "mathjax_inline_tex": 0, "mathjax_display_tex": 0, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0}, "config": {"markdown_headings": true, "markdown_code": true, "boilerplate_config": {"ratio_threshold": 0.18, "absolute_threshold": 10, "end_threshold": 15, "enable": true}, "remove_buttons": true, "remove_image_figures": true, "remove_link_clusters": true, "table_config": {"min_rows": 2, "min_cols": 3, "format": "github"}, "remove_chinese": true, "remove_edit_buttons": true, "extract_latex": true}, "english_confidence": 0.6755232214927673, "perplexity_flag": "middle"}