Learning by doing: Reading books and trying to understand the (code) examples
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
1.2 KiB

  1. #include "cplx.h"
  2. #include <gsl/gsl_blas.h>
  3. #include <gsl/gsl_complex_math.h>
  4. gsl_vector_complex *cvec_dot_gslcplx(gsl_vector_complex *v, gsl_complex x) {
  5. gsl_vector_complex *out = gsl_vector_complex_alloc(v->size);
  6. for (size_t i=0; i < v->size; i++) {
  7. gsl_vector_complex_set(out, i, gsl_complex_mul(x, gsl_vector_complex_get(v, i)));
  8. }
  9. return out;
  10. }
  11. gsl_vector_complex *vec_dot_gslcplx(gsl_vector *v, gsl_complex x) {
  12. gsl_vector_complex *out = gsl_vector_complex_alloc(v->size);
  13. for (size_t i=0; i < v->size; i++) {
  14. gsl_vector_complex_set(out, i, gsl_complex_mul_real(x, gsl_vector_get(v, i)));
  15. }
  16. return out;
  17. }
  18. gsl_vector_complex *cvec_dot_c(gsl_vector_complex *v, complex double x) {
  19. return cvec_dot_gslcplx(v, gsl_cplx_from_c99(x));
  20. }
  21. gsl_vector_complex *vec_dot_c(gsl_vector *v, complex double x) {
  22. return vec_dot_gslcplx(v, gsl_cplx_from_c99(x));
  23. }
  24. complex double ddot(complex double x, complex double y) {
  25. return x * y;
  26. }
  27. void gsl_vector_complex_print(gsl_vector_complex *v) {
  28. for (size_t i = 0; i < v->size; i++) {
  29. gsl_complex x = gsl_vector_complex_get(v, i);
  30. printf("%4g + %4gi%c", GSL_REAL(x), GSL_IMAG(x), i < v->size-1 ? '\t' : '\n');
  31. }
  32. }