C 标准库 <complex.h>
<complex.h>
是 C 标准库中的一个头文件,用于支持复数运算。
<complex.h>
在 C99 标准中引入,提供了一组用于定义和操作复数的类型、宏和函数。
1、复数类型
<complex.h>
定义了以下复数类型:
-
float complex
:单精度复数。 -
double complex
:双精度复数。 -
long double complex
:长双精度复数。
这些类型实际上是 C 标准库中定义的宏,分别扩展为 _Complex float
、_Complex double
和 _Complex long double
。
2、复数常量
<complex.h>
定义了以下宏,用于表示虚数单位 i
:
-
I
:表示虚数单位i
,即sqrt(-1)
。
实例
double complex z = 3.0 + 4.0 * I; // 表示复数 3 + 4i
3、复数操作函数
<complex.h>
提供了一组用于操作复数的函数,包括算术运算、三角函数、指数函数和对数函数等。以下是一些常用函数:
算术运算
函数 | 描述 |
---|---|
creal(z) |
返回复数 z 的实部 |
cimag(z) |
返回复数 z 的虚部 |
cabs(z) |
返回复数 z 的模(绝对值) |
carg(z) |
返回复数 z 的幅角(相位) |
conj(z) |
返回复数 z 的共轭复数 |
cproj(z) |
返回复数 z 的投影 |
三角函数
函数 | 描述 |
---|---|
csin(z) |
返回复数 z 的正弦值 |
ccos(z) |
返回复数 z 的余弦值 |
ctan(z) |
返回复数 z 的正切值 |
指数和对数函数
函数 | 描述 |
---|---|
cexp(z) |
返回复数 z 的指数值 |
clog(z) |
返回复数 z 的自然对数 |
幂函数
函数 | 描述 |
---|---|
cpow(z1, z2) |
返回复数 z1 的 z2 次幂 |
平方根函数
函数 | 描述 |
---|---|
csqrt(z) |
返回复数 z 的平方根 |
4、实例
以下是一个使用 <complex.h>
的示例,展示了如何定义和操作复数:
实例
#include <stdio.h>
#include <complex.h>
int main() {
// 定义复数
double complex z1 = 3.0 + 4.0 * I;
double complex z2 = 1.0 - 2.0 * I;
// 算术运算
double complex sum = z1 + z2;
double complex product = z1 * z2;
// 输出结果
printf("z1 = %.2f + %.2fi\n", creal(z1), cimag(z1));
printf("z2 = %.2f + %.2fi\n", creal(z2), cimag(z2));
printf("Sum = %.2f + %.2fi\n", creal(sum), cimag(sum));
printf("Product = %.2f + %.2fi\n", creal(product), cimag(product));
// 模和幅角
printf("|z1| = %.2f\n", cabs(z1));
printf("Phase of z1 = %.2f radians\n", carg(z1));
// 指数函数
double complex exp_z1 = cexp(z1);
printf("exp(z1) = %.2f + %.2fi\n", creal(exp_z1), cimag(exp_z1));
return 0;
}
#include <complex.h>
int main() {
// 定义复数
double complex z1 = 3.0 + 4.0 * I;
double complex z2 = 1.0 - 2.0 * I;
// 算术运算
double complex sum = z1 + z2;
double complex product = z1 * z2;
// 输出结果
printf("z1 = %.2f + %.2fi\n", creal(z1), cimag(z1));
printf("z2 = %.2f + %.2fi\n", creal(z2), cimag(z2));
printf("Sum = %.2f + %.2fi\n", creal(sum), cimag(sum));
printf("Product = %.2f + %.2fi\n", creal(product), cimag(product));
// 模和幅角
printf("|z1| = %.2f\n", cabs(z1));
printf("Phase of z1 = %.2f radians\n", carg(z1));
// 指数函数
double complex exp_z1 = cexp(z1);
printf("exp(z1) = %.2f + %.2fi\n", creal(exp_z1), cimag(exp_z1));
return 0;
}
输出结果:
z1 = 3.00 + 4.00i z2 = 1.00 + -2.00i Sum = 4.00 + 2.00i Product = 11.00 + -2.00i |z1| = 5.00 Phase of z1 = 0.93 radians exp(z1) = -13.13 + -15.20i
5、注意事项
-
<complex.h>
仅在 C99 及更高版本中可用。 -
复数类型和函数的使用需要包含
<complex.h>
头文件。 -
复数运算的性能可能低于实数运算,特别是在涉及大量计算时。
6、复数运算的数学背景
复数的一般形式为 a + bi
,其中:
-
a
是实部,b
是虚部。 -
i
是虚数单位,满足i² = -1
。
复数的模(绝对值)为:
|z| = sqrt(a² + b²)
复数的幅角(相位)为:
arg(z) = atan2(b, a)
复数的指数形式为:
exp(z) = exp(a) * (cos(b) + i * sin(b))