complex复数库学习

news/2024/10/5 4:26:54/

此头文件是数值库的一部分。本篇介绍complex的基本用法。

常用的API如下:

运算

real

返回实部
(函数模板)

imag

返回虚部
(函数模板)

abs(std::complex)

返回复数的模
(函数模板)

arg

返回辐角
(函数模板)

norm

返回模(范数)的平方
(函数模板)

conj

返回复共轭
(函数模板)

proj

(C++11)

返回到黎曼球上的投影
(函数模板)

polar

从模和辐角构造复数
(函数模板)
指数函数

exp(std::complex)

e 为底复数的指数
(函数模板)

log(std::complex)

沿负实轴切割的复自然对数
(函数模板)

log10(std::complex)

沿负实轴分割的复常用对数
(函数模板)
幂函数

pow(std::complex)

复数幂,一或两个实参可为复数
(函数模板)

sqrt(std::complex)

右半平面范围中的复平方根
(函数模板)
三角函数

sin(std::complex)

计算复数的正弦(sinz)

(函数模板)

cos(std::complex)

计算复数的余弦(cosz)

(函数模板)

tan(std::complex)

计算复数的正切(tanz)

(函数模板)

asin(std::complex)

(C++11)

计算复数的反正弦(arcsinz)

(函数模板)

acos(std::complex)

(C++11)

计算复数的反余弦(arccosz)

(函数模板)

atan(std::complex)

(C++11)

计算复数的反正切(arctanz)

(函数模板)
双曲函数

sinh(std::complex)

计算复数的双曲正弦(sinhz)

(函数模板)

cosh(std::complex)

计算复数的双曲余弦(coshz)

(函数模板)

tanh(std::complex)

计算复数的双曲正切(tanhz)

(函数模板)

asinh(std::complex)

(C++11)

计算复数的反双曲正弦(arsinhz)

(函数模板)

acosh(std::complex)

(C++11)

计算复数的反双曲余弦(arcoshz)

(函数模板)

atanh(std::complex)

(C++11)

计算复数的反双曲正切(artanhz)

示例代码:

#include <iostream>       // std::wcout, std::wcout 
#include <complex>
#include <limits>        
#include <string>         // std::wstring
#include <cmath>         int main()
{// complex operatorsstd::complex<double> mycomplex;mycomplex = 10.0;   // 10mycomplex += 2.0;   // 12std::cout << "mycomplex is " << mycomplex << '\n';mycomplex = std::complex<double>(10.0, 3.0);  // 10+istd::cout << "mycomplex is " << mycomplex << '\n';mycomplex = mycomplex + 10.0;               // 20+iif (mycomplex == std::complex<double>(20.0, 3.0))std::cout << "mycomplex is " << mycomplex << '\n';// std::real examplestd::cout << "Real part:" << std::real(mycomplex) << '\n';// std::imag examplestd::cout << "Imaginary part:" << std::imag(mycomplex) << '\n';// abs complex examplestd::complex<double> mycomplex2(3.0, 4.0);std::cout << "The absolute value of " << mycomplex2 << " is " << std::abs(mycomplex2) << '\n';// arg complex examplestd::cout << "The polar form of " << mycomplex2;std::cout << " is " << std::abs(mycomplex2) << "*e^i*" << std::arg(mycomplex2) << "rad\n";// norm examplestd::cout << "The norm of " << mycomplex2 << " is " << std::norm(mycomplex2) << '\n';// conj examplestd::complex<double> mycomplex3(10.0, 2.0);std::cout << "The conjugate of " << mycomplex3 << " is " << std::conj(mycomplex3) << '\n';// polar examplestd::cout << "The complex whose magnitude is " << 2.0;std::cout << " and phase angle is " << 0.5;std::cout << " is " << std::polar(2.0, 0.5) << '\n';// proj examplestd::complex<double> mycomplex4(std::numeric_limits<double>::infinity(), 2.0);std::cout << "The projection of " << mycomplex4 << " is " << std::proj(mycomplex4) << '\n';// sin examplestd::cout << std::fixed;std::complex<double> z(1, 0); // 表现同沿着实轴的实正弦std::cout << "sin" << z << " = " << std::sin(z)<< "  (sin(1) = " << std::sin(1) << ")\n";// sinh examplestd::complex<double> z2(0, 1); // 表现同沿着虚轴的 sinhstd::cout << "sin" << z2 << " = " << std::sin(z2)<< "  (sinh(1) = " << std::sinh(1) << ")\n";// cos examplestd::complex<double> z3(1.0, 0.0); // 表现为沿实轴的实余弦std::cout << "cos" << z3 << " = " << std::cos(z3)<< " (cos(1) = " << std::cos(1) << ")\n";// cosh examplestd::complex<double> z4(0.0, 1.0); // 表现为沿虚轴的实 coshstd::cout << "cos" << z4 << " = " << std::cos(z4)<< " (cosh(1) = " << std::cosh(1) << ")\n";// tan examplestd::complex<double> z5(1, 0); // 表现类似沿实轴的实正切std::cout << "tan" << z5 << " = " << std::tan(z5)<< " (tan(1) = " << std::tan(1) << ")\n";// tanh examplestd::complex<double> z6(0, 1); // 表现类似沿虚轴的 tanhstd::cout << "tan" << z6 << " = " << std::tan(z6)<< " (tanh(1) = " << std::tanh(1) << ")\n";// asin examplestd::complex<double> z7(-2.0, 0.0);std::cout << "asin" << z7 << " = " << std::asin(z7) << '\n';std::complex<double> z8(-2.0, -0.0);std::cout << "asin" << z8 << " (the other side of the cut) = "<< std::asin(z8) << '\n';// acos example// for any z, asin(z) = acos(−z) − pi / 2const double pi = std::acos(-1);std::complex<double> z9 = std::acos(z8) - pi / 2;std::cout << "sin(acos" << z8 << " - pi / 2) = " << std::sin(z9) << '\n';// atan examplestd::complex<double> z10(0.0, 2.0);std::cout << "atan" << z10 << " = " << std::atan(z10) << '\n';std::complex<double> z11(-0.0, 2.0);std::cout << "atan" << z11 << " (the other side of the cut) = "<< std::atan(z11) << '\n';// atan examplestd::complex<double> z12(0.0, INFINITY);std::cout << "2 * atan" << z12 << " = " << 2.0 * std::atan(z12) << '\n';// asinh examplestd::complex<double> z13(0.0, -2.0);std::cout << "asinh" << z13 << " = " << std::asinh(z13) << '\n';std::complex<double> z14(-0.0, -2);std::cout << "asinh" << z14 << " (the other side of the cut) = "<< std::asinh(z14) << '\n';// for any z, asinh(z) = asin(iz) / istd::complex<double> z15(1.0, 2.0);std::complex<double> i(0.0, 1.0);std::cout << "asinh" << z15 << " = " << std::asinh(z15) << '\n'<< "asin" << z15 * i << " / i = " << std::asin(z15 * i) / i << '\n';// acosh examplestd::complex<double> z16(0.5, 0);std::cout << "acosh" << z16 << " = " << std::acosh(z16) << '\n';std::complex<double> z17(0.5, -0.0);std::cout << "acosh" << z17 << " (the other side of the cut) = "<< std::acosh(z17) << '\n';// 在上半平面,acosh = i acos std::complex<double> z18(1, 1), i2(0, 1);std::cout << "acosh" << z18 << " = " << std::acosh(z18) << '\n'<< "i*acos" << z18 << " = " << i2 * std::acos(z18) << '\n';// atanh examplestd::complex<double> z19(2.0, 0.0);std::cout << "atanh" << z19 << " = " << std::atanh(z19) << '\n';std::complex<double> z20(2.0, -0.0);std::cout << "atanh" << z20 << " (the other side of the cut) = "<< std::atanh(z20) << '\n';// for any z, atanh(z) = atanh(iz) / istd::complex<double> z21(1.0, 2.0);std::complex<double> i3(0.0, 1.0);std::cout << "atanh" << z21 << " = " << std::atanh(z21) << '\n'<< "atan" << z21 * i3 << " / i = " << std::atan(z21 * i3) / i3 << '\n';// exp exampleconst double pi4 = std::acos(-1);const std::complex<double> i4(0, 1);std::cout << std::fixed << "exp(i4*pi4) = " << std::exp(i4 * pi4) << '\n';// log examplestd::complex<double> z22{ 0.0, 1.0 }; // r = 1, θ = pi / 2std::cout << "2 * log" << z22 << " = " << 2.0 * std::log(z22) << '\n';std::complex<double> z23{ sqrt(2.0) / 2, sqrt(2.0) / 2 }; // r = 1, θ = pi / 4std::cout << "4 * log" << z23 << " = " << 4.0 * std::log(z23) << '\n';std::complex<double> z24{ -1.0, 0.0 }; // r = 1, θ = pistd::cout << "log" << z24 << " = " << std::log(z24) << '\n';std::complex<double> z25(-1, -0.0); // 分支的另一侧std::cout << "log" << z25 << " (the other side of the cut) = " << std::log(z25) << '\n';// log10 examplestd::complex<double> z26(0.0, 1.0); // r = 0, θ = pi / 2std::cout << "2 * log10" << z26 << " = " << 2.0 * std::log10(z26) << '\n';std::complex<double> z27(sqrt(2.0) / 2, sqrt(2.0) / 2); // r = 1, θ = pi / 4std::cout << "4 * log10" << z27 << " = " << 4.0 * std::log10(z27) << '\n';std::complex<double> z28(-100.0, 0.0); // r = 100, θ = pistd::cout << "log10" << z28 << " = " << std::log10(z28) << '\n';std::complex<double> z29(-100.0, -0.0); // 切割的另一侧std::cout << "log10" << z29 << " = " << std::log10(z29) << " ""(the other side of the cut)\n""(note: pi / log(10) = " << std::acos(-1.0) / std::log(10.0) << ")\n";// pow examplestd::complex<double> z30(1.0, 2.0);std::cout << "(1,2)^2 = " << std::pow(z30, 2) << '\n';std::complex<double> z31(-1.0, 0.0); // -1 的平方根std::cout << "-1^0.5 = " << std::pow(z31, 0.5) << '\n';std::complex<double> z32(-1.0, -0.0); // 切割的另一侧std::cout << "(-1,-0)^0.5 = " << std::pow(z32, 0.5) << '\n';std::complex<double> i5(0.0, 1.0); // i^i = exp(-pi/2)std::cout << "i^i = " << std::pow(i5, i5) << '\n';// sqrt examplestd::cout << "-4 的平方根是 "<< std::sqrt(std::complex<double>(-4.0, 0.0)) << '\n'<< "(-4,-0) 的平方根是 "<< std::sqrt(std::complex<double>(-4.0, -0.0))<< "(切割的另一侧)\n";return 0;
}

运行结果:

参考:

https://cplusplus.com/reference/complex/

https://zh.cppreference.com/w/cpp/header/complex


http://www.ppmy.cn/news/1473370.html

相关文章

【数据挖掘】银行信用卡风险大数据分析与挖掘

银行信用卡风险大数据分析与挖掘 1、实验目的 中国某个商业银行高层发现自家信用卡存在严重的欺诈和拖欠现象,已经影响到自身经营和发展。银行高层希望大数据分析部门采用数据挖掘技术,对影响用户信用等级的主要因素进行分析,结合信用卡用户的人口特征属性对欺诈行为和拖欠…

自动化任务:在IPython中创建和运行脚本

在数据科学和编程中&#xff0c;自动化任务是提高效率的关键。IPython提供了多种方法来创建和运行脚本&#xff0c;使得重复性任务可以被轻松自动化。本文将介绍如何在IPython中创建和运行脚本&#xff0c;帮助你更高效地完成工作。 1. 创建和保存IPython脚本 使用文本编辑器…

Pycharm一些问题解决办法

研究生期间遇到关于Pycharm一些问题报错以及解决办法的汇总 ModuleNotFoundError: No module named sklearn’ 安装机器学习库&#xff0c;需要注意报错的sklearn是scikit-learn缩写。 pip install scikit-learnPyCharm 导包提示 unresolved reference 描述&#xff1a;模块…

《More Effective C++》《杂项讨论——34、如何在同一个程序中结合C++和C》

文章目录 1、Terms34:如何在同一个程序中结合C和C1.1 名称重整1.2 statics的初始化1.3 动态内存的分配1.4 数据结构的兼容性 2、总结3、参考 1、Terms34:如何在同一个程序中结合C和C 在大型项目中一般都用C进行开发&#xff0c;但是不可避免会用一些C语言进行底层的调用。在确…

Jenkins教程-11-发送钉钉测试报告通知

上一小节我们学习了发送飞书测试报告通知的方法&#xff0c;本小节我们讲解一下发送钉钉测试报告通知的方法。 1、自动化用例执行完后&#xff0c;使用pytest_terminal_summary钩子函数收集测试结果&#xff0c;存入本地status.txt文件中&#xff0c;供Jenkins调用 #conftest…

网络爬虫的原理

网络爬虫的原理 网络爬虫&#xff0c;作为信息检索和数据分析的重要工具&#xff0c;其原理的核心在于模拟人类浏览网页的行为&#xff0c;通过自动化的方式从互联网上收集所需的数据。在了解了网络爬虫的基本原理后&#xff0c;我们可以进一步探讨其在实际应用中的工作机制以…

Java 基础查漏补缺

1.深入解读&#xff1a;JDK与JRE的区别 JDK提供了完整的Java开发工具和资源&#xff0c;包括编译器、调试器和其他开发工具&#xff0c;满足开发人员的各种需求。 JRE则相对更为基础&#xff0c;它只提供了Java程序运行所需的环境&#xff0c;包含了Java虚拟机&#xff08;JVM&…

spring mvc实现一个自定义Converter转换器

介绍 自定义转换器输入Spring MVC框架范畴&#xff0c;总体上输入Spring生态的一个特性&#xff0c;对Web开发起作用。 使用场景 在Spring Boot应用中&#xff0c;自定义转换器主要用于处理HTTP请求参数到Java对象的自动转换&#xff0c;或者Java对象到HTTP响应的序列化过程…