1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 The GSL Team.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "GNU General Public License" and "Free Software
Needs Free Documentation", the Front-Cover text being "A GNU Manual",
and with the Back-Cover Text being (a) (see below). A copy of the
license is included in the section entitled "GNU Free Documentation
License".
(a) The Back-Cover Text is: "You have the freedom to copy and modify this
GNU Manual." -->
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Scientific Library – Reference Manual: Spherical Vector Distributions</title>
<meta name="description" content="GNU Scientific Library – Reference Manual: Spherical Vector Distributions">
<meta name="keywords" content="GNU Scientific Library – Reference Manual: Spherical Vector Distributions">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Function-Index.html#Function-Index" rel="index" title="Function Index">
<link href="Random-Number-Distributions.html#Random-Number-Distributions" rel="up" title="Random Number Distributions">
<link href="The-Weibull-Distribution.html#The-Weibull-Distribution" rel="next" title="The Weibull Distribution">
<link href="The-Pareto-Distribution.html#The-Pareto-Distribution" rel="previous" title="The Pareto Distribution">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
</head>
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Spherical-Vector-Distributions"></a>
<div class="header">
<p>
Next: <a href="The-Weibull-Distribution.html#The-Weibull-Distribution" accesskey="n" rel="next">The Weibull Distribution</a>, Previous: <a href="The-Pareto-Distribution.html#The-Pareto-Distribution" accesskey="p" rel="previous">The Pareto Distribution</a>, Up: <a href="Random-Number-Distributions.html#Random-Number-Distributions" accesskey="u" rel="up">Random Number Distributions</a> [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Spherical-Vector-Distributions-1"></a>
<h3 class="section">20.24 Spherical Vector Distributions</h3>
<p>The spherical distributions generate random vectors, located on a
spherical surface. They can be used as random directions, for example in
the steps of a random walk.
</p>
<dl>
<dt><a name="index-gsl_005fran_005fdir_005f2d"></a>Function: <em>void</em> <strong>gsl_ran_dir_2d</strong> <em>(const gsl_rng * <var>r</var>, double * <var>x</var>, double * <var>y</var>)</em></dt>
<dt><a name="index-gsl_005fran_005fdir_005f2d_005ftrig_005fmethod"></a>Function: <em>void</em> <strong>gsl_ran_dir_2d_trig_method</strong> <em>(const gsl_rng * <var>r</var>, double * <var>x</var>, double * <var>y</var>)</em></dt>
<dd><a name="index-2D-random-direction-vector"></a>
<a name="index-direction-vector_002c-random-2D"></a>
<a name="index-spherical-random-variates_002c-2D"></a>
<p>This function returns a random direction vector <em>v</em> =
(<var>x</var>,<var>y</var>) in two dimensions. The vector is normalized such that
<em>|v|^2 = x^2 + y^2 = 1</em>. The obvious way to do this is to take a
uniform random number between 0 and <em>2\pi</em> and let <var>x</var> and
<var>y</var> be the sine and cosine respectively. Two trig functions would
have been expensive in the old days, but with modern hardware
implementations, this is sometimes the fastest way to go. This is the
case for the Pentium (but not the case for the Sun Sparcstation).
One can avoid the trig evaluations by choosing <var>x</var> and
<var>y</var> in the interior of a unit circle (choose them at random from the
interior of the enclosing square, and then reject those that are outside
the unit circle), and then dividing by <em>\sqrt{x^2 + y^2}</em>.
A much cleverer approach, attributed to von Neumann (See Knuth, v2, 3rd
ed, p140, exercise 23), requires neither trig nor a square root. In
this approach, <var>u</var> and <var>v</var> are chosen at random from the
interior of a unit circle, and then <em>x=(u^2-v^2)/(u^2+v^2)</em> and
<em>y=2uv/(u^2+v^2)</em>.
</p></dd></dl>
<dl>
<dt><a name="index-gsl_005fran_005fdir_005f3d"></a>Function: <em>void</em> <strong>gsl_ran_dir_3d</strong> <em>(const gsl_rng * <var>r</var>, double * <var>x</var>, double * <var>y</var>, double * <var>z</var>)</em></dt>
<dd><a name="index-3D-random-direction-vector"></a>
<a name="index-direction-vector_002c-random-3D"></a>
<a name="index-spherical-random-variates_002c-3D"></a>
<p>This function returns a random direction vector <em>v</em> =
(<var>x</var>,<var>y</var>,<var>z</var>) in three dimensions. The vector is normalized
such that <em>|v|^2 = x^2 + y^2 + z^2 = 1</em>. The method employed is
due to Robert E. Knop (CACM 13, 326 (1970)), and explained in Knuth, v2,
3rd ed, p136. It uses the surprising fact that the distribution
projected along any axis is actually uniform (this is only true for 3
dimensions).
</p></dd></dl>
<dl>
<dt><a name="index-gsl_005fran_005fdir_005fnd"></a>Function: <em>void</em> <strong>gsl_ran_dir_nd</strong> <em>(const gsl_rng * <var>r</var>, size_t <var>n</var>, double * <var>x</var>)</em></dt>
<dd><a name="index-N_002ddimensional-random-direction-vector"></a>
<a name="index-direction-vector_002c-random-N_002ddimensional"></a>
<a name="index-spherical-random-variates_002c-N_002ddimensional"></a>
<p>This function returns a random direction vector
<em>v = (x_1,x_2,...,x_n)</em> in <var>n</var> dimensions. The vector is normalized
such that
<em>|v|^2 = x_1^2 + x_2^2 + ... + x_n^2 = 1</em>. The method
uses the fact that a multivariate Gaussian distribution is spherically
symmetric. Each component is generated to have a Gaussian distribution,
and then the components are normalized. The method is described by
Knuth, v2, 3rd ed, p135–136, and attributed to G. W. Brown, Modern
Mathematics for the Engineer (1956).
</p></dd></dl>
<hr>
<div class="header">
<p>
Next: <a href="The-Weibull-Distribution.html#The-Weibull-Distribution" accesskey="n" rel="next">The Weibull Distribution</a>, Previous: <a href="The-Pareto-Distribution.html#The-Pareto-Distribution" accesskey="p" rel="previous">The Pareto Distribution</a>, Up: <a href="Random-Number-Distributions.html#Random-Number-Distributions" accesskey="u" rel="up">Random Number Distributions</a> [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>
|