Полярные комплексные числа GSL кажутся совершенно разными

Использование minunit.h для тестирования встроенных структур gsl.

Я написал следующий тест:

static
char * test_gsl_polar_complex_number_struct()
{
  double r = 0.325784;
  double theta = 0.421329;

  gsl_complex test_polr_complex_number = gsl_complex_polar ( r, theta ); 

  printf("expected r: %f, actual r: %f\n", r, GSL_REAL(test_polr_complex_number));
  mu_assert("real part of polar complex number does not match expected", 
  GSL_REAL(test_polr_complex_number) == r);

  return 0;
}

Я получаю неудачный тест со следующим выводом:

expected r: 0.325784, actual r: 0.297293
expected theta: 0.421329, actual theta: 0.133237
real part of polar complex number does not match expected

Примечательно, что точно такой же тест выполняется без ошибок на прямоугольной сложной структуре.


person Joshua Cook    schedule 30.08.2015    source источник
comment
Исследуя gsl-complex.h, макрос GSL_REAL определяется как: #define GSL_REAL(z) ((z).dat[0])   -  person Joshua Cook    schedule 30.08.2015
comment
Код, который вы представили, не дал результата, который вы представили. Во всяком случае, не все.   -  person John Bollinger    schedule 31.08.2015
comment
Если мы должны углубиться в семантику, я четко заявил, что написал тест, и что тест провалился. Я никогда не говорил, код я написал.   -  person Joshua Cook    schedule 31.08.2015


Ответы (1)


У вас неправильные ожидания. Функция gsl_complex_polar() инициализирует комплексное число из компонентов, заданных в полярной комплексной форме:

Эта функция возвращает комплексное число z = r \exp(i \theta) = r (\cos(\theta) + i \sin(\theta)) из полярного представления (r,theta)

(документация GSL )

Это нормально, но макрос GSL_REAL() возвращает действительную часть комплексного числа. Это не то же самое, что компонент r полярного представления. На самом деле документы, которые я уже цитировал, точно говорят вам, что это такое: r cos(theta).

person John Bollinger    schedule 30.08.2015