Adding matrix_complex functions to the Matrix subsystem and adding gsl_eigen_herm...
[Math-GSL.git] / Complex.i
blob9da9e5b5084eed5d3d24667d90fd0b3b4d180e6f
1 %module Complex
2 %{
3 #include "/usr/local/include/gsl/gsl_complex.h"
4 #include "/usr/local/include/gsl/gsl_complex_math.h"
5 %}
7 %include "/usr/local/include/gsl/gsl_complex.h"
8 %include "/usr/local/include/gsl/gsl_complex_math.h"
11 %include "carrays.i"
12 %array_functions(double, doubleArray);
14 %perlcode %{
16 @EXPORT_OK = qw(
17 gsl_complex_arg gsl_complex_abs gsl_complex_rect gsl_complex_polar doubleArray_getitem
18 gsl_complex_rect gsl_complex_polar gsl_complex_arg gsl_complex_abs gsl_complex_abs2
19 gsl_complex_logabs gsl_complex_add gsl_complex_sub gsl_complex_mul gsl_complex_div
20 gsl_complex_add_real gsl_complex_sub_real gsl_complex_mul_real gsl_complex_div_real
21 gsl_complex_add_imag gsl_complex_sub_imag gsl_complex_mul_imag gsl_complex_div_imag
22 gsl_complex_conjugate gsl_complex_inverse gsl_complex_negative gsl_complex_sqrt
23 gsl_complex_sqrt_real gsl_complex_pow gsl_complex_pow_real gsl_complex_exp
24 gsl_complex_log gsl_complex_log10 gsl_complex_log_b gsl_complex_sin
25 gsl_complex_cos gsl_complex_sec gsl_complex_csc gsl_complex_tan
26 gsl_complex_cot gsl_complex_arcsin gsl_complex_arcsin_real gsl_complex_arccos
27 gsl_complex_arccos_real gsl_complex_arcsec gsl_complex_arcsec_real gsl_complex_arccsc
28 gsl_complex_arccsc_real gsl_complex_arctan gsl_complex_arccot gsl_complex_sinh
29 gsl_complex_cosh gsl_complex_sech gsl_complex_csch gsl_complex_tanh
30 gsl_complex_coth gsl_complex_arcsinh gsl_complex_arccosh gsl_complex_arccosh_real
31 gsl_complex_arcsech gsl_complex_arccsch gsl_complex_arctanh gsl_complex_arctanh_real
32 gsl_complex_arccoth new_doubleArray delete_doubleArray doubleArray_setitem
33 gsl_real gsl_imag gsl_parts
34 gsl_complex_eq gsl_set_real gsl_set_imag gsl_set_complex
35 $GSL_COMPLEX_ONE $GSL_COMPLEX_ZERO $GSL_COMPLEX_NEGONE
37 # macros to implement
38 # gsl_set_complex gsl_set_complex_packed
39 our ($GSL_COMPLEX_ONE, $GSL_COMPLEX_ZERO, $GSL_COMPLEX_NEGONE) = map { gsl_complex_rect($_, 0) } qw(1 0 -1);
42 %EXPORT_TAGS = ( all => [ @EXPORT_OK ] );
44 ### wrapper interface ###
45 sub new {
46 my ($class, @values) = @_;
47 my $this = {};
48 $this->{_complex} = gsl_complex_rect($values[0], $values[1]);
49 bless $this, $class;
51 sub real {
52 my ($self) = @_;
53 gsl_real($self->{_complex}->{dat});
56 sub imag {
57 my ($self) = @_;
58 gsl_imag($self->{_complex}->{dat});
61 sub parts {
62 my ($self) = @_;
63 gsl_parts($self->{_complex}->{dat});
66 ### end wrapper interface ###
68 ### some important macros that are in gsl_complex.h
69 sub gsl_complex_eq {
70 my ($z,$w) = @_;
71 gsl_real($z) == gsl_real($w) && gsl_imag($z) == gsl_imag($w) ? 1 : 0;
74 sub gsl_set_real {
75 my ($z,$r) = @_;
76 doubleArray_setitem($z->{dat}, 0, $r);
79 sub gsl_set_imag {
80 my ($z,$i) = @_;
81 doubleArray_setitem($z->{dat}, 1, $i);
84 sub gsl_real {
85 my $z = shift;
86 return doubleArray_getitem($z->{dat}, 0 );
89 sub gsl_imag {
90 my $z = shift;
91 return doubleArray_getitem($z->{dat}, 1 );
94 sub gsl_parts {
95 my $z = shift;
96 return (gsl_real($z), gsl_imag($z));
99 sub gsl_set_complex {
100 my ($z, $r, $i) = @_;
101 gsl_set_real($z, $r);
102 gsl_set_imag($z, $i);
105 __END__
107 =head1 NAME
109 Math::GSL::Complex
110 Functions concerning complex numbers.
112 =head1 SYPNOPSIS
114 use Math::GSL::Complex qw/:all/;
116 =head1 DESCRIPTION
118 Here is a list of all the functions included in this module :
120 gsl_complex_arg($z) - return the argument of the complex number $z
122 gsl_complex_abs($z) - return |$z|, the magnitude of the complex number $z
124 gsl_complex_rect($x,$y) - create a complex number in cartesian form $x + $y*I
126 gsl_complex_polar($r,$theta) - create a complex number in polar form $r*exp(I*$theta)
128 gsl_complex_abs2 - return |$z|^2, the squared magnitude of the complex number $z
130 gsl_complex_logabs - return log(|$z|), the natural logarithm of the magnitude of the complex number $z
132 gsl_complex_add($c1, $c2) - return a complex number which is the sum of the complex numbers $c1 and $c2
134 gsl_complex_sub($c1, $c2) - return a complex number which is the difference between $c1 and $c2 ($c1 - $c2)
136 gsl_complex_mul($c1, $c2) - return a complex number which is the product of the complex numbers $c1 and $c2
138 gsl_complex_div($c1, $c2) - return a complex number which is the quotient of the complex numbers $c1 and $c2 ($c1 / $c2)
140 gsl_complex_add_real($c, $x) - return the sum of the complex number $c and the real number $x
142 gsl_complex_sub_real($c, $x) - return the difference of the complex number $c and the real number $x
144 gsl_complex_mul_real($c, $x) - return the product of the complex number $c and the real number $x
146 gsl_complex_div_real($c, $x) - return the quotient of the complex number $c and the real number $x
148 gsl_complex_add_imag($c, $y) - return sum of the complex number $c and the imaginary number i*$x
150 gsl_complex_sub_imag($c, $y) - return the diffrence of the complex number $c and the imaginary number i*$x
152 gsl_complex_mul_imag($c, $y) - return the product of the complex number $c and the imaginary number i*$x
154 gsl_complex_div_imag($c, $y) - return the quotient of the complex number $c and the imaginary number i*$x
156 gsl_complex_conjugate($c) - return the conjugate of the of the complex number $c (x - i*y)
158 gsl_complex_inverse($c) - return the inverse, or reciprocal of the complex number $c (1/$c)
160 gsl_complex_negative($c) - return the negative of the complex number $c (-x -i*y)
162 gsl_complex_sqrt($c) - return the square root of the complex number $c
164 gsl_complex_sqrt_real($x) - return the complex square root of the real number $x, where $x may be negative
166 gsl_complex_pow($c1, $c2) - return the complex number $c1 raised to the complex power $c2
168 gsl_complex_pow_real($c, $x) - return the complex number raised to the real power $x
170 gsl_complex_exp($c) - return the complex exponential of the complex number $c
172 gsl_complex_log($c) - return the complex natural logarithm (base e) of the complex number $c
174 gsl_complex_log10($c) - return the complex base-10 logarithm of the complex number $c
176 gsl_complex_log_b($c, $b) - return the complex base-$b of the complex number $c
178 gsl_complex_sin($c) - return the complex sine of the complex number $c
180 gsl_complex_cos($c) - return the complex cosine of the complex number $c
182 gsl_complex_sec($c) - return the complex secant of the complex number $c
184 gsl_complex_csc($c) - return the complex cosecant of the complex number $c
186 gsl_complex_tan($c) - return the complex tangent of the complex number $c
188 gsl_complex_cot($c) - return the complex cotangent of the complex number $c
190 gsl_complex_arcsin($c) - return the complex arcsine of the complex number $c
192 gsl_complex_arcsin_real($x) - return the complex arcsine of the real number $x
194 gsl_complex_arccos($c) - return the complex arccosine of the complex number $c
196 gsl_complex_arccos_real($x) - return the complex arccosine of the real number $x
198 gsl_complex_arcsec($c) - return the complex arcsecant of the complex number $c
200 gsl_complex_arcsec_real($x) - return the complex arcsecant of the real number $x
202 gsl_complex_arccsc($c) - return the complex arccosecant of the complex number $c
204 gsl_complex_arccsc_real($x) - return the complex arccosecant of the real number $x
206 gsl_complex_arctan($c) - return the complex arctangent of the complex number $c
208 gsl_complex_arccot($c) - return the complex arccotangent of the complex number $c
210 gsl_complex_sinh($c) - return the complex hyperbolic sine of the complex number $c
212 gsl_complex_cosh($c) - return the complex hyperbolic cosine of the complex number $cy
214 gsl_complex_sech($c) - return the complex hyperbolic secant of the complex number $c
216 gsl_complex_csch($c) - return the complex hyperbolic cosecant of the complex number $c
218 gsl_complex_tanh($c) - return the complex hyperbolic tangent of the complex number $c
220 gsl_complex_coth($c) - return the complex hyperbolic cotangent of the complex number $c
222 gsl_complex_arcsinh($c) - return the complex hyperbolic arcsine of the complex number $c
224 gsl_complex_arccosh($c) - return the complex hyperbolic arccosine of the complex number $c
226 gsl_complex_arccosh_real($x) - return the complex hyperbolic arccosine of the real number $x
228 gsl_complex_arcsech($c) - return the complex hyperbolic arcsecant of the complex number $c
230 gsl_complex_arccsch($c) - return the complex hyperbolic arccosecant of the complex number $c
232 gsl_complex_arctanh($c) - return the complex hyperbolic arctangent of the complex number $c
234 gsl_complex_arctanh_real($x) - return the complex hyperbolic arctangent of the real number $x
236 gsl_complex_arccoth($c) - return the complex hyperbolic arccotangent of the complex number $c
238 gsl_real($z) - return the real part of $z
240 gsl_imag($z) - return the imaginary part of $z
242 gsl_parts($z) - return a list of the real and imaginary parts of $z
244 gsl_complex_eq
246 gsl_set_real($z, $x) - sets the real part of $z to $x
248 gsl_set_imag($z, $y) - sets the imaginary part of $z to $y
250 gsl_set_complex($z, $x, $h) - sets the real part of $z to $x and the imaginary part to $y
252 You have to add the functions you want to use inside the qw /put_funtion_here / with spaces between each function.
253 You can also write use Math::GSL::Complex qw/:all/ to use all avaible functions of the module.
255 For more informations on the functions, we refer you to the GSL offcial documentation: http://www.gnu.org/software/gsl/manual/html_node/
256 Tip : search on google: site:http://www.gnu.org/software/gsl/manual/html_node/ name_of_the_function_you_want
258 =head1 EXAMPLES
260 This code defines $z as 6 + 4*I, takes the complex conjugate of that number, then prints it out.
262 my $z = gsl_complex_rect(6,4);
263 my $y = gsl_complex_conjugate($z);
264 my ($real, $imag) = gsl_parts($y);
266 print "z = $real + $imag*I\n";
268 This code defines $z as 5 + 3*I, multiplies it by 2 and then prints it out.
270 my $x = gsl_complex_rect(5,3);
271 my $z = gsl_complex_mul_real($x, 2);
272 my $real = gsl_real($z);
273 my $imag = gsl_real($z);
274 print "Re(\$z) = $real\n";
277 =head1 AUTHOR
279 Jonathan Leto <jonathan@leto.net> and Thierry Moisan <thierry.moisan@gmail.com>
281 =head1 COPYRIGHT AND LICENSE
283 Copyright (C) 2008 Jonathan Leto and Thierry Moisan
285 This program is free software; you can redistribute it and/or modify it
286 under the same terms as Perl itself.
288 =cut