complex复数库学习

此头文件是数值库的一部分。本篇介绍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 operators
	std::complex<double> mycomplex;

	mycomplex = 10.0;   // 10
	mycomplex += 2.0;   // 12
	std::cout << "mycomplex is " << mycomplex << '\n';
	mycomplex = std::complex<double>(10.0, 3.0);  // 10+i
	std::cout << "mycomplex is " << mycomplex << '\n';
	mycomplex = mycomplex + 10.0;               // 20+i

	if (mycomplex == std::complex<double>(20.0, 3.0))
		std::cout << "mycomplex is " << mycomplex << '\n';

	// std::real example
	std::cout << "Real part:" << std::real(mycomplex) << '\n';
	// std::imag example
	std::cout << "Imaginary part:" << std::imag(mycomplex) << '\n';
	// abs complex example
	std::complex<double> mycomplex2(3.0, 4.0);
	std::cout << "The absolute value of " << mycomplex2 << " is " << std::abs(mycomplex2) << '\n';
	// arg complex example
	std::cout << "The polar form of " << mycomplex2;
	std::cout << " is " << std::abs(mycomplex2) << "*e^i*" << std::arg(mycomplex2) << "rad\n";
	// norm example
	std::cout << "The norm of " << mycomplex2 << " is " << std::norm(mycomplex2) << '\n';
	// conj example
	std::complex<double> mycomplex3(10.0, 2.0);
	std::cout << "The conjugate of " << mycomplex3 << " is " << std::conj(mycomplex3) << '\n';
	// polar example
	std::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 example
	std::complex<double> mycomplex4(std::numeric_limits<double>::infinity(), 2.0);
	std::cout << "The projection of " << mycomplex4 << " is " << std::proj(mycomplex4) << '\n';
	// sin example
	std::cout << std::fixed;
	std::complex<double> z(1, 0); // 表现同沿着实轴的实正弦
	std::cout << "sin" << z << " = " << std::sin(z)
		<< "  (sin(1) = " << std::sin(1) << ")\n";
	// sinh example
	std::complex<double> z2(0, 1); // 表现同沿着虚轴的 sinh
	std::cout << "sin" << z2 << " = " << std::sin(z2)
		<< "  (sinh(1) = " << std::sinh(1) << ")\n";
	// cos example
	std::complex<double> z3(1.0, 0.0); // 表现为沿实轴的实余弦
	std::cout << "cos" << z3 << " = " << std::cos(z3)
		<< " (cos(1) = " << std::cos(1) << ")\n";
	// cosh example
	std::complex<double> z4(0.0, 1.0); // 表现为沿虚轴的实 cosh
	std::cout << "cos" << z4 << " = " << std::cos(z4)
		<< " (cosh(1) = " << std::cosh(1) << ")\n";
	// tan example
	std::complex<double> z5(1, 0); // 表现类似沿实轴的实正切
	std::cout << "tan" << z5 << " = " << std::tan(z5)
		<< " (tan(1) = " << std::tan(1) << ")\n";
	// tanh example
	std::complex<double> z6(0, 1); // 表现类似沿虚轴的 tanh
	std::cout << "tan" << z6 << " = " << std::tan(z6)
		<< " (tanh(1) = " << std::tanh(1) << ")\n";
	// asin example
	std::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 / 2
	const 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 example
	std::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 example
	std::complex<double> z12(0.0, INFINITY);
	std::cout << "2 * atan" << z12 << " = " << 2.0 * std::atan(z12) << '\n';
	// asinh example
	std::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) / i
	std::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 example
	std::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 example
	std::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) / i
	std::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 example
	const 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 example
	std::complex<double> z22{ 0.0, 1.0 }; // r = 1, θ = pi / 2
	std::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 / 4
	std::cout << "4 * log" << z23 << " = " << 4.0 * std::log(z23) << '\n';

	std::complex<double> z24{ -1.0, 0.0 }; // r = 1, θ = pi
	std::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 example
	std::complex<double> z26(0.0, 1.0); // r = 0, θ = pi / 2
	std::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 / 4
	std::cout << "4 * log10" << z27 << " = " << 4.0 * std::log10(z27) << '\n';

	std::complex<double> z28(-100.0, 0.0); // r = 100, θ = pi
	std::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 example
	std::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 example
	std::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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/775398.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GuLi商城-商品服务-API-品牌管理-效果优化与快速显示开关

<template><div class"mod-config"><el-form :inline"true" :model"dataForm" keyup.enter.native"getDataList()"><el-form-item><el-input v-model"dataForm.key" placeholder"参数名&qu…

首个“可控”人物视频生成大模型--商汤Vimi:一张照片生成一分钟视频

商汤科技又整大活了&#xff0c;只需一张照片就能生成一分钟视频&#xff01; 7月4日&#xff0c;商汤发布了业内首个面向C端用户的、“可控”人物视频生成大模型产品Vimi&#xff0c;毫不夸张的说&#xff0c;视频制作者的福音来了&#xff01; Vimi有什么特别之处&#xff1…

Python爬虫零基础实战,简洁实用!

1.爬虫简介 简单来讲&#xff0c;爬虫就是一个探测机器&#xff0c;它的基本操作就是模拟人的行为去各个网站溜达&#xff0c;点点按钮&#xff0c;查查数据&#xff0c;或者把看到的信息背回来。就像一只虫子在一幢楼里不知疲倦地爬来爬去。 你可以简单地想象&#xff1a;每个…

Ubuntu 22.04 安装中文字体

笔者在用OpenCV4.9处理图片加水印时&#xff0c;中文乱码。原来是Ubuntu 22.04发行版缺少中文字体支持&#xff0c;因此&#xff0c;笔者就找资料安装了需要的中文字体&#xff0c;特此记录&#xff0c;以备后查。 1、打开终端&#xff1a; 2、更新软件包列表&#xff1a; su…

哏号分治,CF103D - Time to Raid Cowavans

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 103D - Time to Raid Cowavans 二、解题报告 1、思路分析 想了半天数据结构最终选择根号分治 我们考虑 大于 550 的公差直接暴力 小于550 的公差的所有询问&#xff0c;我们直接计算该公差后缀和&#xf…

【Linux进阶】磁盘分区3——目录树,挂载

Linux安装模式下&#xff0c;磁盘分区的选择&#xff08;极重要&#xff09; 在Windows 系统重新安装之前&#xff0c;你可能会事先考虑&#xff0c;到底系统盘C盘要有多大容量&#xff1f;而数据盘D盘又要给多大容量等&#xff0c;然后实际安装的时候&#xff0c;你会发现其实…

Rocky Linux 9.4基于官方源码制作openssh 9.8p1二进制rpm包 —— 筑梦之路

2024年7月1日&#xff0c;openssh 9.8版本发布&#xff0c;主要修复了CVE-2024-6387安全漏洞。 由于centos 7的生命周期在6月30日终止&#xff0c;因此需要逐步替换到Rocky Linux&#xff0c;后续会有更多分享关于Rocky Linux的文章。 环境说明 1. 操作系统版本 cat /etc/o…

【Odoo开源ERP】别把ERP与进销存软件混为一谈

导读&#xff1a;企业使用ERP软件能够实现管理升级&#xff0c;多方信息集成&#xff0c;按照既定策略逻辑运算&#xff0c;生成计划建议&#xff0c;减少人力成本&#xff0c;提高准确率的同时提高经营能力。 ERP&#xff0c;是MRP II的下一代软件&#xff0c;除了MRP II已有的…

(0)2024年基于财务的数据科学项目Python编程基础(Jupyter Notebooks)

目录 前言学习目标&#xff1a;学习内容&#xff1a;大纲 前言 随着数据科学的迅猛发展&#xff0c;其在财务领域的应用也日益广泛。财务数据的分析和预测对于企业的决策过程至关重要。 本专栏旨在通过Jupyter Notebooks这一强大的交互式计算工具&#xff0c;介绍基于财务的数…

Uniapp 默认demo安装到手机里启动只能看得到底tab无法看到加载内容解决方案

Uniapp 默认demo安装到手机里以后&#xff0c;启动APP只能看到底tab栏&#xff0c;无法看到每个tab页对应的内容&#xff0c;HBuilder会有一些这样的报错信息&#xff1a; Waiting to navigate to: /pages/tabBar/API/API, do not operate continuously: 解决方案&#xff1a;…

在Linux操作系统中关于逻辑卷的案例

1.如何去创建一个逻辑卷 1.1先去创建物理卷 如上图所示&#xff0c;physical volume 物理卷 被成功创建。 如上图所示&#xff0c;可以使用pvscan来去查看当前Linux操作系统的物理卷/ 1.2使用创建好的物理卷去创建一个卷组。 如上图所示&#xff0c;可以使用第一步创建的两个…

windows电脑网络重置后wifi列表消失怎么办?

我们的电脑网络偶尔会出现异常&#xff0c;我们通常会下意识选择网络诊断&#xff0c;运行完诊断后一般会让我们选择重置网络&#xff0c;然而&#xff0c;重置后wifi列表突然消失&#xff0c;无法愉快地上网了&#xff0c;找了一圈&#xff0c;都说是更改适配器选项&#xff0…

CV02_超强数据集:MSCOCO数据集的简单介绍

1.1 简介 MSCOCO数据集&#xff0c;全称为Microsoft Common Objects in Context&#xff0c;是由微软公司在2014年推出并维护的一个大规模的图像数据集&#xff0c;旨在推动计算机视觉领域的研究&#xff0c;尤其是目标识别、目标检测、实例分割、图像描述生成等任务。该数据集…

CTF之unseping

拿到题目看不懂&#xff1f;这是难度1&#xff1f;含泪去看大佬的wp&#xff0c;写下我的自传&#xff01; <?php highlig…

滑动窗口(C++)

文章目录 1、长度最小的子数组2、无重复字符的最长子串3、最大连续1的个数 Ⅲ4、将x减到0的最小操作数5、水果成篮6、找到字符串中所有字母异位词7、串联所有单词的子串8、最小覆盖子串 通常&#xff0c;算法的主体说明会放在第一道题中。但实际上&#xff0c;不通常。 算法在代…

window上部署sql server改动端口、和sqlserver的一些还原、批量插入存储过程的命令

1.端口的查看和启动 --windows上安装上sql server数据库后&#xff0c;搜索界面搜索sql&#xff0c;会出现配置管理器&#xff0c;点击进入 --进入后再次选择配置管理器 2. sqlserver数据库还原图形化 sqlserver还原数据库时会使数据库进入一个restore的还原状态&#xff0c;…

图像的灰度直方图

先来认识一下灰度直方图&#xff0c;灰度直方图是图像灰度级的函数&#xff0c;用来描述每个灰度级在图像矩阵中的像素个数或者占有率。接下来使用程序实现直方图&#xff1a; 首先导入所需的程序包&#xff1a; In [ ]: import cv2 import numpy as np import matplotlib…

CSS原子化

目录 一、定义 二、原子化工具 2.1、tailwind 2.1.1、以PostCss插件形式安装 2.1.2、不依赖PostCss安装 2.1.3、修改原始配置 2.2、unocss 三、优缺点 3.1、优点 3.2、缺点 一、定义 定义&#xff1a;使用一系列的助记词&#xff0c;利用类名来代表样式。 二、原子化…

重载赋值运算符

c编译器可能会给类添加四个函数 1默认构造函数 2默认析构函数 3默认拷贝构造函数&#xff0c;对成员变量进行浅拷贝。 4默认赋值函数&#xff0c;队成员变量进行浅拷贝。 #include<iostream> using namespace std; class CGirl { public:int m_bh;string m_name;voi…

每日复盘-20240705

今日关注&#xff1a; 20240705 六日涨幅最大: ------1--------300391--------- 长药控股 五日涨幅最大: ------1--------300391--------- 长药控股 四日涨幅最大: ------1--------300391--------- 长药控股 三日涨幅最大: ------1--------300391--------- 长药控股 二日涨幅最…