18#ifndef OPAL_GSL_MATRIX_HH
19#define OPAL_GSL_MATRIX_HH
38 double*
ptr(
size_t i,
size_t j) {
return data + i *
tda + j; }
40 const double*
ptr(
size_t i,
size_t j)
const {
return data + i *
tda + j; }
99 m->
data =
new double[n1 * n2];
101 std::fill(m->
data, m->
data + n1 * n2, 0.0);
127 for (
size_t i = 0; i < n1 * n2; ++i) {
151 v->
data =
new double[n];
153 std::fill(v->
data, v->
data + n, 0.0);
177 for (
size_t i = 0; i < n; ++i) {
270 throw std::runtime_error(
"gsl_matrix_memcpy: size mismatch");
281 throw std::runtime_error(
"gsl_matrix_complex_memcpy: size mismatch");
293 throw std::runtime_error(
"gsl_matrix_transpose_memcpy: size mismatch");
295 for (
size_t i = 0; i < src->
size1; ++i) {
296 for (
size_t j = 0; j < src->
size2; ++j) {
310 throw std::runtime_error(
"gsl_matrix_complex_transpose_memcpy: size mismatch");
312 for (
size_t i = 0; i < src->
size1; ++i) {
313 for (
size_t j = 0; j < src->
size2; ++j) {
325 for (
size_t i = 0; i < m->
size1 * m->
size2; ++i) {
336 for (
size_t i = 0; i < m->
size1 * m->
size2; ++i) {
348 throw std::runtime_error(
"gsl_matrix_add: size mismatch");
350 for (
size_t i = 0; i < a->
size1 * a->
size2; ++i) {
362 throw std::runtime_error(
"gsl_matrix_complex_add: size mismatch");
364 for (
size_t i = 0; i < a->
size1 * a->
size2; ++i) {
376 throw std::runtime_error(
"gsl_vector_memcpy: size mismatch");
378 for (
size_t i = 0; i < src->
size; ++i) {
389 throw std::runtime_error(
"gsl_vector_complex_memcpy: size mismatch");
391 for (
size_t i = 0; i < src->
size; ++i) {
402 for (
size_t i = 0; i < v->
size; ++i) {
413 for (
size_t i = 0; i < v->
size; ++i) {
425 throw std::runtime_error(
"gsl_vector_add: size mismatch");
427 for (
size_t i = 0; i < a->
size; ++i) {
439 throw std::runtime_error(
"gsl_vector_complex_add: size mismatch");
441 for (
size_t i = 0; i < a->
size; ++i) {
472 for (
size_t i = 0; i < m->
size1 * m->
size2; ++i) {
489 for (
size_t i = 0; i < n; ++i) {
518 for (
size_t i = 0; i < m->
size1 * m->
size2; ++i) {
542 for (
size_t i = 0; i < v->
size; ++i) {
574 for (
size_t i = 0; i < v->
size; ++i) {
gsl_complex gsl_complex_mul(gsl_complex a, gsl_complex b)
Product .
gsl_complex gsl_complex_add(gsl_complex a, gsl_complex b)
Sum .
gsl_matrix * gsl_matrix_alloc(size_t n1, size_t n2)
Allocate a zero-initialized real matrix of size .
void gsl_matrix_complex_transpose_memcpy(gsl_matrix_complex *dest, const gsl_matrix_complex *src)
Copy the transpose into dest (complex).
void gsl_vector_complex_add(gsl_vector_complex *a, const gsl_vector_complex *b)
Add another complex vector in-place.
void gsl_matrix_set(gsl_matrix *m, size_t i, size_t j, double x)
Set .
double gsl_matrix_get(const gsl_matrix *m, size_t i, size_t j)
Get .
gsl_complex gsl_matrix_complex_get(const gsl_matrix_complex *m, size_t i, size_t j)
Get complex entry .
void gsl_matrix_free(gsl_matrix *m)
Free a matrix allocated by gsl_matrix_alloc.
void gsl_vector_free(gsl_vector *v)
Free a vector allocated by gsl_vector_alloc.
void gsl_vector_scale(gsl_vector *v, double x)
Scale a vector in-place.
gsl_complex * gsl_vector_complex_ptr(gsl_vector_complex *v, size_t i)
Return pointer to element in a complex vector.
void gsl_matrix_complex_scale(gsl_matrix_complex *m, gsl_complex x)
Scale a complex matrix in-place.
gsl_vector * gsl_vector_alloc(size_t n)
Allocate a zero-initialized real vector of length .
void gsl_matrix_complex_memcpy(gsl_matrix_complex *dest, const gsl_matrix_complex *src)
Copy src into dest (complex matrices).
void gsl_vector_memcpy(gsl_vector *dest, const gsl_vector *src)
void gsl_vector_complex_set_zero(gsl_vector_complex *v)
Set all complex entries to zero.
void gsl_matrix_transpose_memcpy(gsl_matrix *dest, const gsl_matrix *src)
Copy the transpose into dest.
void gsl_matrix_complex_free(gsl_matrix_complex *m)
Free a matrix allocated by gsl_matrix_complex_alloc.
void gsl_vector_set_zero(gsl_vector *v)
Set all entries to zero.
void gsl_vector_complex_scale(gsl_vector_complex *v, gsl_complex x)
Scale a complex vector in-place.
double * gsl_vector_ptr(gsl_vector *v, size_t i)
Return pointer to element in a real vector.
void gsl_matrix_scale(gsl_matrix *m, double x)
Scale a matrix in-place.
void gsl_vector_complex_memcpy(gsl_vector_complex *dest, const gsl_vector_complex *src)
Copy src into dest (complex vectors).
void gsl_matrix_complex_set(gsl_matrix_complex *m, size_t i, size_t j, gsl_complex x)
Set complex entry .
gsl_complex gsl_vector_complex_get(const gsl_vector_complex *v, size_t i)
Get complex entry .
void gsl_vector_set_all(gsl_vector *v, double x)
Set all entries to x.
double gsl_vector_get(const gsl_vector *v, size_t i)
Get .
double * gsl_matrix_ptr(gsl_matrix *m, size_t i, size_t j)
Return pointer to element in a real matrix.
gsl_vector_complex * gsl_vector_complex_alloc(size_t n)
Allocate a zero-initialized complex vector of length .
void gsl_matrix_set_all(gsl_matrix *m, double x)
Set all entries to x.
void gsl_matrix_set_identity(gsl_matrix *m)
Set to identity on the main diagonal.
void gsl_vector_complex_set(gsl_vector_complex *v, size_t i, gsl_complex x)
Set complex entry .
void gsl_vector_complex_free(gsl_vector_complex *v)
Free a vector allocated by gsl_vector_complex_alloc.
void gsl_matrix_complex_add(gsl_matrix_complex *a, const gsl_matrix_complex *b)
Add another complex matrix in-place.
gsl_complex * gsl_matrix_complex_ptr(gsl_matrix_complex *m, size_t i, size_t j)
Return pointer to element in a complex matrix.
void gsl_vector_set(gsl_vector *v, size_t i, double x)
Set .
gsl_matrix_complex * gsl_matrix_complex_alloc(size_t n1, size_t n2)
Allocate a zero-initialized complex matrix of size .
void gsl_matrix_complex_set_zero(gsl_matrix_complex *m)
Set all complex entries to zero.
void gsl_matrix_memcpy(gsl_matrix *dest, const gsl_matrix *src)
Copy src into dest (real matrices).
void gsl_matrix_add(gsl_matrix *a, const gsl_matrix *b)
Add another matrix in-place.
void gsl_vector_add(gsl_vector *a, const gsl_vector *b)
Add another vector in-place.
void gsl_matrix_set_zero(gsl_matrix *m)
Set all entries to zero.
Complex number stored as .
Dense complex matrix in row-major storage.
const gsl_complex * ptr(size_t i, size_t j) const
gsl_complex * ptr(size_t i, size_t j)
Dense real matrix in row-major storage.
double * ptr(size_t i, size_t j)
const double * ptr(size_t i, size_t j) const
Dense complex vector with stride.
const gsl_complex * ptr(size_t i) const
gsl_complex * ptr(size_t i)
Dense real vector with stride.
const double * ptr(size_t i) const