File: Spherical-Vector-Distributions.html

package info (click to toggle)
gsl-ref-html 2.3-1
  • links: PTS
  • area: non-free
  • in suites: bullseye, buster, sid
  • size: 6,876 kB
  • ctags: 4,574
  • sloc: makefile: 35
file content (142 lines) | stat: -rw-r--r-- 8,046 bytes parent folder | download
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 &ndash; Reference Manual: Spherical Vector Distributions</title>

<meta name="description" content="GNU Scientific Library &ndash; Reference Manual: Spherical Vector Distributions">
<meta name="keywords" content="GNU Scientific Library &ndash; 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> &nbsp; [<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&ndash;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> &nbsp; [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>