GSL Polar 复数看起来极为不同

GSL Polar Complex Numbers Appear to be extremely different

使用 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

值得注意的是,在矩形复杂结构上执行完全相同的测试没有错误。

你有错误的期望。函数 gsl_complex_polar() 从以极复数形式给出的分量初始化一个复数:

This function returns the complex number z = r \exp(i \theta) = r (\cos(\theta) + i \sin(\theta)) from the polar representation (r,theta)

(GSL documentation)

很好,但是 GSL_REAL() 宏 returns 是复数的实部。这与极坐标表示的 r 组件不同。事实上,我已经引用的文档告诉你它到底是什么:r cos(theta).