>> Just wondering if someone can help me out with using vector views. I have a >> set of N complex numbers which I am storing in a 2*N size gsl_vector. I am >> using this because I am looking for the solution of a nonlinear system, and, >> to the best of my knowledge, the multidimensional root finding algorithms >> only take functions with gsl_vector arguments. >> >> So here's my question, does anyone have any tips on how to set up vector >> views so that I have pointers available that logically map to the real and >> imaginary portions of the vector? I.e., I want >> >> gsl_vector * z // Size 2*N >> gsl_vector * a // Size N, a= Re z >> gsl_vector * b// Size N, b= Im z > > Vector views are 1D subsets of matrices -- e.g. if you wanted to refer to a > given column of a matrix by a different, more convenient name. I'm working > from memory here, but I'm not certain there are any functions to create a > vector view with a subvector. I would have guessed you wanted a z = 2*N > matrix, then create vector views from each of the two rows or columns to hold > the real and imaginary channels in vector(like) structures. If you want to > handle the vector view (vv) as an actual vector, which appears to be the > case, you have use &vv.vector.
You can actually create vector views of subvectors: http://www.gnu.org/software/gsl/manual/html_node/Vector-views.html and as John says you can use &vv.vector in all the same places you would use a gsl_vector*. I would have thought his suggestion of a 2xN matrix might make more logical sense for your problem, though. If you do prefer a vector, you might want to give a little thought to whether an interleaved or separated arrangement in your vector will be more efficient and/or cause you less hassle in the long run (i.e. whether you store Re(z1), Im(z1), Re(z2), Im(z2) or alternatively Re(z1), Re(z2)..., Im(z1), Im(z2)...)
