当前位置: 首页 > ai >正文

std::complex

std::complex 是 C++ 标准库中用于处理复数的模板类,主要定义在 <complex> 头文件中。它非常适合进行科学计算、信号处理等领域所需的复数运算。

下面我们通过一个可执行的示例程序来详细了解 std::complex 的主要用法。

#include <iostream>
#include <complex>
#include <cmath> // 用于M_PI等常数int main() {// 1. 构造复数std::complex<double> z1(3.0, 4.0);  // 3 + 4istd::complex<double> z2(1.0, -2.0); // 1 - 2istd::complex<double> z_from_real(5.0); // 5 + 0i (仅提供实部,虚部默认为0)std::cout << "z1: " << z1 << std::endl;std::cout << "z2: " << z2 << std::endl;std::cout << "z_from_real: " << z_from_real << "\n\n";// 2. 访问和修改实部与虚部std::cout << "Real part of z1: " << z1.real() << std::endl; // 获取实部std::cout << "Imaginary part of z1: " << z1.imag() << std::endl; // 获取虚部z1.real(10.0); // 修改实部为10.0z1.imag(0.0);  // 修改虚部为0.0std::cout << "Modified z1: " << z1 << "\n\n";// 恢复z1的值z1.real(3.0);z1.imag(4.0);// 3. 基本算术运算std::complex<double> sum = z1 + z2;std::complex<double> difference = z1 - z2;std::complex<double> product = z1 * z2;std::complex<double> quotient = z1 / z2;std::cout << "Sum (z1 + z2): " << sum << std::endl;std::cout << "Difference (z1 - z2): " << difference << std::endl;std::cout << "Product (z1 * z2): " << product << std::endl;std::cout << "Quotient (z1 / z2): " << quotient << "\n\n";// 4. 常用数学函数double magnitude = std::abs(z1); // 模长 |z1| = sqrt(real^2 + imag^2)double phase = std::arg(z1);     // 相位角 (辐角)std::complex<double> conjugate = std::conj(z1); // 共轭复数 (实部相同,虚部相反)double norm_value = std::norm(z1); // 模长的平方 (real^2 + imag^2)std::cout << "Magnitude of z1: " << magnitude << std::endl;std::cout << "Phase (angle) of z1: " << phase << " radians" << std::endl;std::cout << "Conjugate of z1: " << conjugate << std::endl;std::cout << "Norm of z1 (|z1|^2): " << norm_value << "\n\n";// 5. 极坐标转换// 从极坐标构造复数: 模长为5,相位角为π/4 (45度)std::complex<double> z_polar = std::polar(5.0, M_PI / 4);std::cout << "Complex from polar (r=5, θ=π/4): " << z_polar << std::endl;// 获取复数的极坐标参数std::cout << "Radius of z_polar: " << std::abs(z_polar) << std::endl;std::cout << "Angle of z_polar: " << std::arg(z_polar) << " radians\n\n";// 6. 其他数学运算std::complex<double> exp_z = std::exp(z1); // 指数函数 e^(z1)std::complex<double> log_z = std::log(z1); // 自然对数 ln(z1)std::complex<double> pow_z = std::pow(z1, 2); // 幂函数 z1^2std::complex<double> sin_z = std::sin(z1); // 正弦函数 sin(z1)std::cout << "exp(z1): " << exp_z << std::endl;std::cout << "log(z1): " << log_z << std::endl;std::cout << "z1^2: " << pow_z << std::endl;std::cout << "sin(z1): " << sin_z << "\n\n";// 7. 复数与实数的混合运算std::complex<double> z_real_mixed = z1 + 2.5; // 复数与实数相加std::cout << "z1 + 2.5: " << z_real_mixed << std::endl;return 0;
}

要编译和运行这个程序,你可以使用g++编译器(确保使用C++11或更高标准):

g++ -std=c++11 -o complex_example complex_example.cpp
./complex_example

💡 一些说明与注意事项

  • 模板类型std::complex 是一个模板类,你可以根据需要选择 float, doublelong double 作为底层类型,例如 std::complex<float>std::complex<long double>,以满足不同场景下对精度和内存的需求。
  • 输入/输出std::cinstd::cout 支持 std::complex 对象的输入和输出。输出格式默认为 (real,imaginary),输入时也需要遵循类似的格式。
  • 性能与稳定性:对于性能敏感的应用,可以考虑使用 std::norm 来获取模长的平方以避免开方运算,并在处理数值范围相差很大的实部和虚部时注意数值稳定性问题。
  • C++20 比较操作:从 C++20 开始,你可以直接使用 ==!= 来比较两个复数是否相等(实部和虚部分别相等)。

希望这个详细的示例和解释能帮助你更好地理解和使用 std::complex。如果你在特定的运算或应用场景中遇到问题,欢迎提出!

http://www.xdnf.cn/news/20092.html

相关文章:

  • 深入剖析Spring动态代理:揭秘JDK动态代理如何精确路由接口方法调用
  • 实习结束,秋招开启
  • 通过API接口管理企业微信通讯录案例
  • AI大模型如何重塑日常?从智能办公到生活服务的5个核心改变
  • 算法模板(Java版)_DFS与BFS
  • 贵州移动创维E900V22F-S905L3SB-全分区备份
  • 【Linux网络编程】应用层协议-----HTTPS协议
  • C#中IEnumerable 、IAsyncEnumerable、yield
  • 13问详解VoLTE视频客服:菊风带你从基础到应用,厘清所有疑惑
  • 储能调峰新实践:智慧能源平台如何保障风电消纳与电网稳定?
  • 从 0 到 1 攻克订单表分表分库:亿级流量下的数据库架构实战指南
  • 嵌入式第四十六天(51单片机(通信))
  • 2025年你需要了解的大型语言模型部署工具
  • 配置WSL2的Ubuntu接受外部设备访问
  • 课前准备--基因组(WGS/WES)联合单细胞获取突变信息
  • 分析KLA-Tencor公司膜厚THK产品
  • Python 算数运算练习题
  • 应对技术选型与技术债务以及架构设计与业务需求的关系
  • 概率与数理统计公式及结论汇总
  • 从策略到实效|Adobe Target 实战应用与成功案例
  • uni-app iOS 文件调试常见问题与解决方案:结合 itools、克魔、iMazing 的实战经验
  • 用spring框架实现简单的MVC业务
  • 远程协作下的项目失控:不是信任危机,而是感知缺失
  • 7种流行Prompt设计模式详解:适用场景与最佳实践
  • 快速、归并、堆、希尔、ArrayList排序
  • pyinstaller
  • SQL decode() 函数
  • Python爬虫实战:研究Axes Grid模块,构建旅游平台酒店数据采集和分析系统
  • VNC连接服务器实现远程桌面-针对官方给的链接已经失效问题
  • Linux 综合练习