Math::GSL::Vector - Functions concerning vectors use Math::GSL::Vector qw/:all/; my $vec1 = Math::GSL::Vector->new([1, 7, 94, 15 ]); my $vec2 = $vec1 * 5; my $vec3 = Math::GSL::Vector>new(10); # 10 element zero vector my $vec4 = $vec1 + $vec2; # set the element at index 1 to 9 # and the element at index 3 to 8 $vec3->set([ 1, 3 ], [ 9, 8 ]); my @vec = $vec2->as_list; # return elements as Perl list my $dot_product = $vec1 * $vec2; my $length = $vec2->length; my $first = $vec1->get(0);

Math::GSL::Vector->new()
Creates a new Vector of the given size. my $vector = Math::GSL::Vector->new(3); You can also create and set directly the values of the vector like this : my $vector = Math::GSL::Vector->new([2,4,1]);

swap()
Exchanges the values in the vectors $v with $w by copying. my $v = Math::GSL::Vector->new([1..5]); my $w = Math::GSL::Vector->new([3..7]); $v->swap( $w );

reverse()
Reverse the elements in the vector. $v->reverse;

min()
Returns the minimum value contained in the vector. my $vector = Math::GSL::Vector->new([2,4,1]); my $minimum = $vector->min;

max()
Returns the minimum value contained in the vector. my $vector = Math::GSL::Vector->new([2,4,1]); my $maximum = $vector->max;

length()
Returns the number of elements contained in the vector. my $vector = Math::GSL::Vector->new([2,4,1]); my $length = $vector->length;

$v->norm($p)
Returns the p-norm of $v, which defaults to the Euclidean (p=2) norm when no argument is given. my $euclidean_distance = $v->norm;

normalize($p)
Divide each element of a vector by it's norm, hence creating a unit vector. Returns the vector for chaining. If you just want the value of the norm without changing the vector, use "norm()". The default value for $p is 2, which gives the familiar Euclidean distance norm. my $unit_vector = $vector->normalize(2); is the same as my $unit_vector = $vector->normalize;

as_list()
Gets the content of a Math::GSL::Vector object as a Perl list. my $vector = Math::GSL::Vector->new(3); ... my @values = $vector->as_list;

get()
Gets the value of an of a Math::GSL::Vector object. my $vector = Math::GSL::Vector->new(3); ... my @values = $vector->get(2); You can also enter an array of indices to receive their corresponding values: my $vector = Math::GSL::Vector->new(3); ... my @values = $vector->get([0,2]);

set()
Sets values of an of a Math::GSL::Vector object. my $vector = Math::GSL::Vector->new(3); $vector->set([1,2], [8,23]); This sets the second and third value to 8 and 23.

copy()
Returns a copy of the vector, which has the same length and values but resides at a different location in memory. my $vector = Math::GSL::Vector->new([10 .. 20]); my $copy = $vector->copy; Here is a list of all the functions included in this module : Precision on the vector_view type : every modification you'll make on a vector_view will also modify the original vector. For example, the following code will zero the even elements of the vector $v of length $size, while leaving the odd elements untouched : For more informations on the functions, we refer you to the GSL offcial documentation: <http://www.gnu.org/software/gsl/manual/html_node/> Tip : search on google: site:http://www.gnu.org/software/gsl/manual/html_node/ name_of_the_function_you_want Here is an example using both interfaces. use Math::GSL::Vector qw/:all/; print "We'll create this vector : [0,1,4,9,16] \n"; my $vector = Math::GSL::Vector->new([0,1,4,9,16]); my ($min, $max) = gsl_vector_minmax_index($vector->raw); print "We then check the index value of the maximum and minimum values of the vector. \n"; print "The index of the maximum should be 4 and we received $max \n"; print "The index of the minimum should be 0 and we received $min \n"; print "We'll then swap the first and the third elements of the vector \n"; gsl_vector_swap_elements($vector->raw, 0, 3); my @got = $vector->as_list; print "The vector should now be like this : [9,1,4,0,16] \n"; print "and we received : [ @got ]\n"; Jonathan Leto <jonathan@leto.net> and Thierry Moisan <thierry.moisan@gmail.com> Copyright (C) 2008-2009 Jonathan Leto and Thierry Moisan This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.