12243

61 分钟

#complex.h

这个头文件提供 复数运算 的相关功能,提供了一系列处理复数的类型定义、宏和函数。

复数在数字信号处理、系统控制理论、电路分析、量子力学等数学和工程领域有着广泛的应用。

complex.h 中定义了以下复数类型:

  • float complex - 单精度复数,即实部和虚部是 float 类型

  • double complex - 双精度复数,即实部和虚部是 double 类型

  • long double complex - 长双精度复数,即实部和虚部是 long double 类型

其中虚数单位通过常量 I(大写字母 I)表示。

需要链接数学库,例如在 gcc 中需要添加 -lm 链接选项。

示例:

#include <stdio.h> #include <complex.h> // 复数支持 #include <math.h> // 数学函数 int main() { // ========== 1. 复数基础操作 ========== double complex z1 = 3.0 + 4.0 * I; // 3 + 4i double complex z2 = 1.0 - 2.0 * I; // 1 - 2i // 算术运算 double complex sum = z1 + z2; double complex product = z1 * z2; double complex conjugate = conj(z1); printf("基础运算:\n"); printf("z1 + z2 = %.2f %+.2fi\n", creal(sum), cimag(sum)); printf("z1 * z2 = %.2f %+.2fi\n", creal(product), cimag(product)); printf("z1的共轭复数 = %.2f %+.2fi\n\n", creal(conjugate), cimag(conjugate)); // ========== 2. 工程应用:阻抗计算 ========== double R = 5.0; // 电阻 (Ω) double L = 0.1; // 电感 (H) double omega = 50; // 角频率 (rad/s) double complex Z = R + omega * L * I; // 阻抗 Z = R + jωL printf("阻抗计算 (RLC电路):\n"); printf("Z = %.2f + j%.2f Ω\n", creal(Z), cimag(Z)); printf("|Z| = %.2f Ω\n", cabs(Z)); printf("Z 的相位角 = %.2f 度\n\n", carg(Z) * 180 / M_PI); // ========== 3. 信号处理:DFT计算 ========== double complex signal[] = {1 + 0*I, 0 + 1*I, -1 + 0*I, 0 - 1*I}; // 示例信号 int N = sizeof(signal) / sizeof(signal[0]); double complex freq_component = 0; for (int k = 0; k < N; k++) { freq_component += signal[k] * cexp(-I * 2 * M_PI * k / N); // DFT公式 } printf("信号分析 (DFT):\n"); printf("基频分量 = %.2f %+.2fi\n", creal(freq_component), cimag(freq_component)); printf("幅值主值 = %.2f, 相位 = %.2f°\n\n", cabs(freq_component), carg(freq_component) * 180 / M_PI); // ========== 4. 复数函数应用 ========== double complex z = 1.0 + 1.0 * I; printf("复数函数:\n"); printf("e^(1+i) = %.2f %+.2fi\n", creal(cexp(z)), cimag(cexp(z))); printf("sqrt(i) = %.2f %+.2fi\n", creal(csqrt(I)), cimag(csqrt(I))); printf("sin(iπ/2) = %.2fi\n", cimag(csin(I * M_PI_2))); return 0; }

运行结果:

user@host:~ $ gcc main.c -lm
user@host:~ $ ./a.out
基础运算:
z1 + z2 = 4.00 +2.00i
z1 * z2 = 11.00 -2.00i
z1的共轭复数 = 3.00 -4.00i

阻抗计算 (RLC电路):
Z = 5.00 + j5.00 Ω
|Z| = 7.07 Ω
Z 的相位角 = 45.00 度

信号分析 (DFT):
基频分量 = 4.00 +0.00i
幅值主值 = 4.00, 相位 = 0.00°

复数函数:
e^(1+i) = 1.47 +2.29i
sqrt(i) = 0.71 +0.71i
sin(iπ/2) = 2.30i

#类型

类型标准说明
imaginaryC99虚数类型
complexC99复数类型

#常量

常量标准说明
IC99虚数单位

#函数

函数标准说明
CMPLXC11创建 double complex 类型的复数
CMPLXFC11创建 float complex 类型的复数
CMPLXLC11创建 long double complex 类型的复数
crealC99获取 double complex 的实部
crealfC99获取 float complex 的实部
creallC99获取 long double complex 的实部
cimagC99获取 double complex 的虚部
cimagfC99获取 float complex 的虚部
cimaglC99获取 long double complex 的虚部
cabsC99计算 double complex 的绝对值
cabsfC99计算 float complex 的绝对值
cabslC99计算 long double complex 的绝对值
cargC99计算 double complex 的辐角主值(−π 到 π)
cargfC99计算 float complex 的辐角主值(−π 到 π)
carglC99计算 long double complex 的辐角主值(−π 到 π)
conjC99计算 double complex 的共轭复数
conjfC99计算 float complex 的共轭复数
conjlC99计算 long double complex 的共轭复数
cprojC99计算 double complex 在黎曼球上的投影
cprojfC99计算 float complex 在黎曼球上的投影
cprojlC99计算 long double complex 在黎曼球上的投影
cexpC99计算 double complex 以自然常数 e 为底的复指数
cexpfC99计算 float complex 以自然常数 e 为底的复指数
cexplC99计算 long double complex 以自然常数 e 为底的复指数
clogC99计算 double complex 以自然常数 e 为底的对数
clogfC99计算 float complex 以自然常数 e 为底的对数
cloglC99计算 long double complex 以自然常数 e 为底的对数
cpowC99计算 double complex 的幂
cpowfC99计算 float complex 的幂
cpowlC99计算 long double complex 的幂
csqrtC99计算 double complex 的平方根
csqrtfC99计算 float complex 的平方根
csqrtlC99计算 long double complex 的平方根
csinC99计算 double complex 的正弦
csinfC99计算 float complex 的正弦
csinlC99计算 long double complex 的正弦
ccosC99计算 double complex 的余弦
ccosfC99计算 float complex 的余弦
ccoslC99计算 long double complex 的余弦
ctanC99计算 double complex 的正切
ctanfC99计算 float complex 的正切
ctanlC99计算 long double complex 的正切
casinC99计算 double complex 的反正弦
casinfC99计算 float complex 的反正弦
casinlC99计算 long double complex 的反正弦
cacosC99计算 double complex 的反余弦
cacosfC99计算 float complex 的反余弦
cacoslC99计算 long double complex 的反余弦
catanC99计算 double complex 的反正切
catanfC99计算 float complex 的反正切
catanlC99计算 long double complex 的反正切
csinhC99计算 double complex 的双曲正弦
csinhfC99计算 float complex 的双曲正弦
csinhlC99计算 long double complex 的双曲正弦
ccoshC99计算 double complex 的双曲余弦
ccoshfC99计算 float complex 的双曲余弦
ccoshlC99计算 long double complex 的双曲余弦
ctanhC99计算 double complex 的双曲正切
ctanhfC99计算 float complex 的双曲正切
ctanhlC99计算 long double complex 的双曲正切
casinhC99计算 double complex 的双曲反正弦
casinhfC99计算 float complex 的双曲反正弦
casinhlC99计算 long double complex 的双曲反正弦
cacoshC99计算 double complex 的双曲反余弦
cacoshfC99计算 float complex 的双曲反余弦
cacoshlC99计算 long double complex 的双曲反余弦
catanhC99计算 double complex 的双曲反正切
catanhfC99计算 float complex 的双曲反正切
catanhlC99计算 long double complex 的双曲反正切

创建于 2025/6/1

更新于 2025/6/5