Index of Functions: A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X
dvnorm_c

 Procedure Abstract Required_Reading Keywords Brief_I/O Detailed_Input Detailed_Output Parameters Exceptions Files Particulars Examples Restrictions Literature_References Author_and_Institution Version Index_Entries

#### Procedure

```   dvnorm_c ( Derivative of vector norm )

SpiceDouble       dvnorm_c ( ConstSpiceDouble state[6] )

```

#### Abstract

```   Calculate the derivative of the norm of a 3-vector.
```

```   None.
```

#### Keywords

```   DERIVATIVES
MATH
VECTOR

```

#### Brief_I/O

```   VARIABLE  I/O  DESCRIPTION
--------  ---  --------------------------------------------------
state      I   A 6-vector composed of three coordinates and their
derivatives.

The function returns the derivative of the norm of the position
component of the input `state' vector.
```

#### Detailed_Input

```   state       is a double precision 6-vector, the second three
components being the derivatives of the first three
with respect to some scalar.

dx
state =  ( x, -- )
ds

A common form for `state' would contain position and
velocity.
```

#### Detailed_Output

```   The function returns the derivative of the norm of the position
component of the input `state' vector:

d ||x||
dvnorm_c = --------
ds

where the norm of x is given by:

.----------------
.---------       /    2    2    2
||x|| =  \/ < x, x >  = \  / ( x1 + x2 + x3  )
\/

If the velocity component of `state' is:

dx1   dx2   dx3
v = ( ----, ----, ---- )
ds    ds    ds

then

d||x||      < x, v >
------ =  ------------  =  < xhat, v >
ds        .---------
\/ < x, x >
```

#### Parameters

```   None.
```

#### Exceptions

```   Error free.

1)  If the first three components of `state' ("x") describe the
origin (zero vector) the routine returns zero as the
derivative of the vector norm.
```

#### Files

```   None.
```

#### Particulars

```   A common use for this routine is to calculate the time derivative
of the radius corresponding to a state vector.
```

#### Examples

```   The numerical results shown for this example may differ across
platforms. The results depend on the SPICE kernels used as
input, the compiler and supporting libraries, and the machine
specific arithmetic implementation.

1) Compute the derivative of the norm of three vectors of
different magnitudes. Use the first two vectors to define
the derivatives as parallel and anti-parallel, and let
the third be the zero vector

Example code begins here.

/.
Program dvnorm_ex1
./
#include <math.h>
#include <stdio.h>
#include "SpiceUsr.h"

int main()
{

/.
Local variables.
./
SpiceDouble     mag  [3] =  { -4., 4., 12. };
SpiceDouble     x1   [3];
SpiceDouble     y    [6];

/.
Initialize `x1'.
./
vpack_c( 1., sqrt(2.), sqrt(3.), x1 );

/.
Parallel...
./
y[0] = x1[0] * pow(10., mag[0] );
y[1] = x1[1] * pow(10., mag[0] );
y[2] = x1[2] * pow(10., mag[0] );
y[3] = x1[0];
y[4] = x1[1];
y[5] = x1[2];

printf( "Parallel x, dx/ds         : %f\n", dvnorm_c( y ) );

/.
...anti-parallel...
./
y[0] = x1[0] * pow(10., mag[1] );
y[1] = x1[1] * pow(10., mag[1] );
y[2] = x1[2] * pow(10., mag[1] );
y[3] = -x1[0];
y[4] = -x1[1];
y[5] = -x1[2];

printf( "Anti-parallel x, dx/ds    : %f\n", dvnorm_c( y ) );

/.
...'x' zero vector.
./
y[0] = 0.;
y[1] = 0.;
y[2] = 0.;
y[3] = x1[0] * pow(10., mag[2] );
y[4] = x1[1] * pow(10., mag[2] );
y[5] = x1[2] * pow(10., mag[2] );

printf( "Zero vector x, large dx/ds: %f\n", dvnorm_c( y ) );

return 0;
}

When this program was executed on a Mac/Intel/cc/64-bit
platform, the output was:

Parallel x, dx/ds         : 2.449490
Anti-parallel x, dx/ds    : -2.449490
Zero vector x, large dx/ds: 0.000000
```

#### Restrictions

```   None.
```

#### Literature_References

```   None.
```

#### Author_and_Institution

```   J. Diaz del Rio     (ODC Space)
E.D. Wright         (JPL)
```

#### Version

```   -CSPICE Version 1.0.1, 27-AUG-2021 (JDR)

```   derivative of 3-vector norm
`Fri Dec 31 18:41:05 2021`