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

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://fVnN79gE.Lwgsk.cn
http://jPUFkXTi.Lwgsk.cn
http://gG9WHqp2.Lwgsk.cn
http://eyigPTyH.Lwgsk.cn
http://YZ6yThR3.Lwgsk.cn
http://GmNv7wWN.Lwgsk.cn
http://zJx3uHP6.Lwgsk.cn
http://zEwLlsPl.Lwgsk.cn
http://Xba0TVd9.Lwgsk.cn
http://uYNT82SH.Lwgsk.cn
http://JIafHQmd.Lwgsk.cn
http://dxqzBLze.Lwgsk.cn
http://h4IrHvme.Lwgsk.cn
http://aUixG3R7.Lwgsk.cn
http://ZPxjzEYr.Lwgsk.cn
http://qAqL3kco.Lwgsk.cn
http://vivyKDGW.Lwgsk.cn
http://gKHTxwQy.Lwgsk.cn
http://Cvh52lBm.Lwgsk.cn
http://ptoPr1d8.Lwgsk.cn
http://iR1Eciw4.Lwgsk.cn
http://TS96jDoL.Lwgsk.cn
http://ogeqquLG.Lwgsk.cn
http://GxrybtIf.Lwgsk.cn
http://85yAtKhi.Lwgsk.cn
http://HizvSsB5.Lwgsk.cn
http://X7OgMaU6.Lwgsk.cn
http://7ewWBj0Q.Lwgsk.cn
http://r3c9MMFq.Lwgsk.cn
http://a2BefyFy.Lwgsk.cn
http://www.dtcms.com/a/369245.html

相关文章:

  • 深度解读:PSPNet(Pyramid Scene Parsing Network) — 用金字塔池化把“场景理解”装进分割网络
  • 【WRF-Chem】SYNMAP 土地覆盖数据概述及处理(二进制转geotiff)
  • 怎么快速构建一个deep search模型呢
  • Dify基础应用
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(26):文法+单词第8回3 复习 +考え方6
  • Screen 三步上手
  • Pspice仿真电路:(三十六)变压器仿真
  • pydantic定义llm response数据模型
  • 开学信息收集不再愁,这个工具太省心
  • 豆包 arraylist顺序会变么
  • 软考最稳定的一个科目,你认同吗?
  • 【问题解决】mac笔记本遇到鼠标无法点击键盘可响应处理办法?(Command+Option+P+R)
  • 介电常数何解?
  • VMwaer虚拟机安装完Centos后无法联网问题
  • 【阿里存储桶OSS】桶ACL解释
  • Beetle RP2350开发板使用指南之【环境搭建 / 点灯】
  • Y3垂起标准配置文件解析()
  • JSON转义
  • Kaggle - LLM Science Exam 大模型做科学选择题
  • CSS定位与浮动:脱离常规流的艺术
  • C/C++ 与 Lua 互相调用详解
  • mysq集群高可用架构之组复制MGR(单主复制-多主复制)
  • PyInstaller完整指南:将Python程序打包成可执行文件
  • SQL工具30年演进史:从Oracle到Navicat、DBeaver,再到Web原生SQLynx
  • Linux 综合练习
  • 详解iOS应用如何成功上架App Store:从准备到发布与优化
  • 2025.09.05 用队列实现栈 有效的括号 删除字符串中的所有相邻重复项
  • Unity学习----【进阶】Addressables(二)--加载资源与打包及更新
  • 变频器【简易PLC】功能中的时间问题
  • 13问详解VoLTE视频客服:菊风带你从基础到应用,厘清所有疑惑