Comment out some more free() calls, which need to be turned on per-subsystem to weed...
[Math-GSL.git] / pod / Complex.pod
bloba73c48663f9e2df15dae85a2c31a596de9aa6399
1 %perlcode %{
3 @EXPORT_OK = qw(
4     gsl_complex_arg gsl_complex_abs gsl_complex_rect gsl_complex_polar doubleArray_getitem 
5     gsl_complex_rect gsl_complex_polar gsl_complex_arg gsl_complex_abs gsl_complex_abs2 
6     gsl_complex_logabs gsl_complex_add gsl_complex_sub gsl_complex_mul gsl_complex_div 
7     gsl_complex_add_real gsl_complex_sub_real gsl_complex_mul_real gsl_complex_div_real 
8     gsl_complex_add_imag gsl_complex_sub_imag gsl_complex_mul_imag gsl_complex_div_imag 
9     gsl_complex_conjugate gsl_complex_inverse gsl_complex_negative gsl_complex_sqrt 
10     gsl_complex_sqrt_real gsl_complex_pow gsl_complex_pow_real gsl_complex_exp 
11     gsl_complex_log gsl_complex_log10 gsl_complex_log_b gsl_complex_sin 
12     gsl_complex_cos gsl_complex_sec gsl_complex_csc gsl_complex_tan 
13     gsl_complex_cot gsl_complex_arcsin gsl_complex_arcsin_real gsl_complex_arccos 
14     gsl_complex_arccos_real gsl_complex_arcsec gsl_complex_arcsec_real gsl_complex_arccsc 
15     gsl_complex_arccsc_real gsl_complex_arctan gsl_complex_arccot gsl_complex_sinh 
16     gsl_complex_cosh gsl_complex_sech gsl_complex_csch gsl_complex_tanh 
17     gsl_complex_coth gsl_complex_arcsinh gsl_complex_arccosh gsl_complex_arccosh_real 
18     gsl_complex_arcsech gsl_complex_arccsch gsl_complex_arctanh gsl_complex_arctanh_real 
19     gsl_complex_arccoth new_doubleArray delete_doubleArray doubleArray_setitem
20     gsl_real gsl_imag gsl_parts
21     gsl_complex_eq gsl_set_real gsl_set_imag gsl_set_complex
22     $GSL_COMPLEX_ONE $GSL_COMPLEX_ZERO $GSL_COMPLEX_NEGONE
24 # macros to implement
25 # gsl_set_complex gsl_set_complex_packed
26 our ($GSL_COMPLEX_ONE, $GSL_COMPLEX_ZERO, $GSL_COMPLEX_NEGONE) = map { gsl_complex_rect($_, 0) } qw(1 0 -1); 
29 %EXPORT_TAGS = ( all => [ @EXPORT_OK ] );
31 sub new {
32     my ($class, @values) = @_;
33     my $this = {};
34     $this->{_complex} = gsl_complex_rect($values[0], $values[1]);
35     bless $this, $class;
37 sub real {
38     my ($self) = @_;
39     gsl_real($self->{_complex}->{dat});
42 sub imag {
43     my ($self) = @_;
44     gsl_imag($self->{_complex}->{dat});
47 sub parts {
48     my ($self) = @_;
49     gsl_parts($self->{_complex}->{dat});
52 sub raw  { (shift)->{_complex} }
55 ### some important macros that are in gsl_complex.h
56 sub gsl_complex_eq {
57     my ($z,$w) = @_;
58     gsl_real($z) == gsl_real($w) && gsl_imag($z) == gsl_imag($w) ? 1 : 0;
61 sub gsl_set_real {
62     my ($z,$r) = @_;
63     doubleArray_setitem($z->{dat}, 0, $r);
66 sub gsl_set_imag {
67     my ($z,$i) = @_;
68     doubleArray_setitem($z->{dat}, 1, $i);
71 sub gsl_real {
72     my $z = shift;
73     return doubleArray_getitem($z->{dat}, 0 );
76 sub gsl_imag {
77     my $z = shift;
78     return doubleArray_getitem($z->{dat}, 1 );
81 sub gsl_parts {
82     my $z = shift;
83     return (gsl_real($z), gsl_imag($z));
86 sub gsl_set_complex {
87     my ($z, $r, $i) = @_;
88     gsl_set_real($z, $r);
89     gsl_set_imag($z, $i);
92 =head1 NAME
94 Math::GSL::Complex - Complex Numbers
96 =head1 SYNOPSIS
98     use Math::GSL::Complex qw/:all/;
99     my $complex = Math::GSL::Complex->new([3,2]); # creates a complex number 3+2*i
100     my $real = $complex->real;                    # returns the real part
101     my $imag = $complex->imag;                    # returns the imaginary part
102     $complex->gsl_set_real(5);                    # changes the real part to 5
103     $complex->gsl_set_imag(4);                    # changes the imaginary part to 4
104     $complex->gsl_set_complex(7,6);               # changes it to 7 + 6*I
105     ($real, $imag) = $complex->parts;
107 =head1 DESCRIPTION
109 Here is a list of all the functions included in this module :
111 =over 1
113 =item C<gsl_complex_arg($z)> - return the argument of the complex number $z 
115 =item C<gsl_complex_abs($z)> - return |$z|, the magnitude of the complex number $z 
117 =item C<gsl_complex_rect($x,$y)> - create a complex number in cartesian form $x + $y*I
119 =item C<gsl_complex_polar($r,$theta)> - create a complex number in polar form $r*exp(I*$theta) 
121 =item C<gsl_complex_abs2($z)> - return |$z|^2, the squared magnitude of the complex number $z
123 =item C<gsl_complex_logabs($z)> - return log(|$z|), the natural logarithm of the magnitude of the complex number $z 
125 =item C<gsl_complex_add($c1, $c2)> - return a complex number which is the sum of the complex numbers $c1 and $c2 
127 =item C<gsl_complex_sub($c1, $c2)> - return a complex number which is the difference between $c1 and $c2 ($c1 - $c2) 
129 =item C<gsl_complex_mul($c1, $c2)> - return a complex number which is the product of the complex numbers $c1 and $c2
131 =item C<gsl_complex_div($c1, $c2)> - return a complex number which is the quotient of the complex numbers $c1 and $c2 ($c1 / $c2)
133 =item C<gsl_complex_add_real($c, $x)> - return the sum of the complex number $c and the real number $x 
135 =item C<gsl_complex_sub_real($c, $x)> - return the difference of the complex number $c and the real number $x 
137 =item C<gsl_complex_mul_real($c, $x)> - return the product of the complex number $c and the real number $x 
139 =item C<gsl_complex_div_real($c, $x)> - return the quotient of the complex number $c and the real number $x  
141 =item C<gsl_complex_add_imag($c, $y)> - return sum of the complex number $c and the imaginary number i*$x 
143 =item C<gsl_complex_sub_imag($c, $y)> - return the diffrence of the complex number $c and the imaginary number i*$x 
145 =item C<gsl_complex_mul_imag($c, $y)> - return the product of the complex number $c and the imaginary number i*$x  
147 =item C<gsl_complex_div_imag($c, $y)> - return the quotient of the complex number $c and the imaginary number i*$x 
149 =item C<gsl_complex_conjugate($c)> - return the conjugate of the of the complex number $c (x - i*y)  
151 =item C<gsl_complex_inverse($c)> - return the inverse, or reciprocal of the complex number $c (1/$c) 
153 =item C<gsl_complex_negative($c)> - return the negative of the complex number $c (-x -i*y) 
155 =item C<gsl_complex_sqrt($c)> - return the square root of the complex number $c 
157 =item C<gsl_complex_sqrt_real($x)> - return the complex square root of the real number $x, where $x may be negative
159 =item C<gsl_complex_pow($c1, $c2)> - return the complex number $c1 raised to the complex power $c2 
161 =item C<gsl_complex_pow_real($c, $x)> - return the complex number raised to the real power $x 
163 =item C<gsl_complex_exp($c)> - return the complex exponential of the complex number $c 
165 =item C<gsl_complex_log($c)> - return the complex natural logarithm (base e) of the complex number $c 
167 =item C<gsl_complex_log10($c)> - return the complex base-10 logarithm of the complex number $c
169 =item C<gsl_complex_log_b($c, $b)> - return the complex base-$b of the complex number $c 
171 =item C<gsl_complex_sin($c)> - return the complex sine of the complex number $c
173 =item C<gsl_complex_cos($c)> - return the complex cosine of the complex number $c 
175 =item C<gsl_complex_sec($c)> - return the complex secant of the complex number $c 
177 =item C<gsl_complex_csc($c)> - return the complex cosecant of the complex number $c 
179 =item C<gsl_complex_tan($c)> - return the complex tangent of the complex number $c 
181 =item C<gsl_complex_cot($c)> - return the complex cotangent of the complex number $c 
183 =item C<gsl_complex_arcsin($c)> - return the complex arcsine of the complex number $c 
185 =item C<gsl_complex_arcsin_real($x)> - return the complex arcsine of the real number $x 
187 =item C<gsl_complex_arccos($c)> - return the complex arccosine of the complex number $c 
189 =item C<gsl_complex_arccos_real($x)> - return the complex arccosine of the real number $x 
191 =item C<gsl_complex_arcsec($c)> - return the complex arcsecant of the complex number $c 
193 =item C<gsl_complex_arcsec_real($x)> - return the complex arcsecant of the real number $x
195 =item C<gsl_complex_arccsc($c)> - return the complex arccosecant of the complex number $c 
197 =item C<gsl_complex_arccsc_real($x)> - return the complex arccosecant of the real number $x
199 =item C<gsl_complex_arctan($c)> - return the complex arctangent of the complex number $c
201 =item C<gsl_complex_arccot($c)> - return the complex arccotangent of the complex number $c 
203 =item C<gsl_complex_sinh($c)> - return the complex hyperbolic sine of the complex number $c 
205 =item C<gsl_complex_cosh($c)> - return the complex hyperbolic cosine of the complex number $cy
207 =item C<gsl_complex_sech($c)> - return the complex hyperbolic secant of the complex number $c
209 =item C<gsl_complex_csch($c)> - return the complex hyperbolic cosecant of the complex number $c
211 =item C<gsl_complex_tanh($c)> - return the complex hyperbolic tangent of the complex number $c
213 =item C<gsl_complex_coth($c)> - return the complex hyperbolic cotangent of the complex number $c
215 =item C<gsl_complex_arcsinh($c)> - return the complex hyperbolic arcsine of the complex number $c
217 =item C<gsl_complex_arccosh($c)> - return the complex hyperbolic arccosine of the complex number $c
219 =item C<gsl_complex_arccosh_real($x)> - return the complex hyperbolic arccosine of the real number $x 
221 =item C<gsl_complex_arcsech($c)> - return the complex hyperbolic arcsecant of the complex number $c
223 =item C<gsl_complex_arccsch($c)> - return the complex hyperbolic arccosecant of the complex number $c
225 =item C<gsl_complex_arctanh($c)> - return the complex hyperbolic arctangent of the complex number $c
227 =item C<gsl_complex_arctanh_real($x)> - return the complex hyperbolic arctangent of the real number $x 
229 =item C<gsl_complex_arccoth($c)> - return the complex hyperbolic arccotangent of the complex number $c
231 =item C<gsl_real($z)> - return the real part of $z 
233 =item C<gsl_imag($z)> - return the imaginary part of $z 
235 =item C<gsl_parts($z)> - return a list of the real and imaginary parts of $z
237 =item C<gsl_set_real($z, $x)> - sets the real part of $z to $x
239 =item C<gsl_set_imag($z, $y)> - sets the imaginary part of $z to $y
241 =item C<gsl_set_complex($z, $x, $h)> - sets the real part of $z to $x and the imaginary part to $y
243 =back
245 =head1 EXAMPLES
247 This code defines $z as 6 + 4*I, takes the complex conjugate of that number, then prints it out.
249 =over 1
251     my $z = gsl_complex_rect(6,4);
252     my $y = gsl_complex_conjugate($z);
253     my ($real, $imag) = gsl_parts($y);
254     print "z = $real + $imag*I\n";
256 =back
258 This code defines $z as 5 + 3*I, multiplies it by 2 and then prints it out.
260 =over 1
262     my $x = gsl_complex_rect(5,3);
263     my $z = gsl_complex_mul_real($x, 2);
264     my $real = gsl_real($z);
265     my $imag = gsl_imag($z);
266     print "Re(\$z) = $real\n";
268 =back
270 =head1 AUTHORS
272 Jonathan Leto <jonathan@leto.net> and Thierry Moisan <thierry.moisan@gmail.com>
274 =head1 COPYRIGHT AND LICENSE
276 Copyright (C) 2008-2009 Jonathan Leto and Thierry Moisan
278 This program is free software; you can redistribute it and/or modify it
279 under the same terms as Perl itself.
281 =cut