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
Index Page dvnorm_c
Table of contents
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.
#### Required_Reading
       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)

           Edited the header to comply with NAIF standard. Added example's
           problem statement. Moved the contents of the -Restrictions section
           to -Exceptions.

           Updated example code to remove non ANSI-C feature.

       -CSPICE Version 1.0.0, 04-MAY-2010 (EDW)
#### Index_Entries
       derivative of 3-vector norm
#### Link to routine dvnorm_c source file dvnorm_c.c

    Fri Dec 31 18:41:05 2021