mult.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /* Author: Bill Hoff,2-114C,8645,3563478 (hoff) at uicsl */
  2. /*!
  3. * \fn int G_math_complex_mult (double *v1[2], int size1, double *v2[2], int size2, double *v3[2], int size3)
  4. *
  5. * \brief Multiply two complex vectors, point by point
  6. *
  7. * Vectors are in the form: real, imaginary (each a floating number).
  8. * A vector can be of any size. Computes <b>v3</b> = <b>v1</b> *
  9. * <b>v2</b>. <b>v3</b> should as big as the biggest of <b>v1</b> and
  10. * <b>v2</b>.
  11. *
  12. * \param v1
  13. * \param size1
  14. * \param v2
  15. * \param size2
  16. * \param v3
  17. * \param size3
  18. * \return int
  19. */
  20. int
  21. G_math_complex_mult(double *v1[2], int size1, double *v2[2], int size2, double *v3[2],
  22. int size3)
  23. {
  24. int i, n;
  25. n = (size1 < size2 ? size1 : size2); /* get the smaller size */
  26. for (i = 0; i < n; i++) {
  27. *(v3[0] + i) =
  28. *(v1[0] + i) * *(v2[0] + i) - *(v1[1] + i) * *(v2[1] + i);
  29. *(v3[1] + i) =
  30. *(v1[0] + i) * *(v2[1] + i) + *(v2[0] + i) * *(v1[1] + i);
  31. }
  32. /* if unequal size, zero out remaining elements of larger vector */
  33. if (size1 != size2)
  34. for (i = n; i < size3; i++) {
  35. *(v3[0] + i) = 0.0;
  36. *(v3[1] + i) = 0.0;
  37. }
  38. return 0;
  39. }