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
Fri Dec 31 18:41:05 2021