【C#】封装的复数运算类库及拓展到复数域的Math类
由于C#没有提供复数(Complex)的运算类库,复数类需要自己定义。
我们主要呈现了两个类,Complex,并做了一个MathX,将三角函数、指对函数等拓展到复数域。
Complex(double re, double im) | 复数类构造函数 |
! | 共轭运算符,返回共轭 |
+-*/ | 四则运算符 |
Arg() Modulus() ModulusSqure() | 幅角,模长,模长平方 |
Complex(double a) | 强制类型转换运算符 |
Exp | 自然指数函数 |
Log | 自然对数函数,指定底数对数函数 |
Sin | 正弦 |
Cos | 余弦 |
Tan | 正切 |
Cot | 余切 |
Csc | 正割 |
Sec | 余割 |
Pow | 指数函数 |
Acos | 反余弦 |
Asin | 反正弦 |
Atan | 反正切 |
Sqrt | 平方根 |
MathX类的成员函数都是静态的,参数和返回值都是复数。
/// <summary>/// 常数/// </summary>public class Constants{/// <summary>/// 圆周率π/// </summary>public const double π = 3.1415926536;/// <summary>/// 自然底数e/// </summary>public const double e = 2.71828182846;/// <summary>/// 欧拉常数γ/// </summary>public const double γ = 0.5772156649;/// <summary>/// 混沌常数δ/// </summary>public const double δ = 4.6692016091;}/// <summary>/// 复数类型/// </summary>public struct Complex{public double Re, Im;//实部、虚部public Complex(double re, double im){Re = re;Im = im;}/// <summary>/// 返回共轭/// </summary>/// <param name="a"></param>/// <returns></returns>public static Complex operator!(Complex a)//{return new Complex(a.Re, -a.Im);}/// <summary>/// 返回模长/// </summary>/// <returns></returns>public double Modulus()//模长{return Math.Sqrt(Re * Re + Im * Im);}/// <summary>/// 返回模长的平方/// </summary>/// <returns></returns>public double ModulusSquare(){return Re * Re + Im * Im;}/// <summary>/// 返回幅角/// </summary>/// <returns></returns>public double Arg()//幅角{if (Im > 0)return Math.Acos(Re / (Modulus()*1.0000000000001));elsereturn -Math.Acos(Re / (Modulus()*1.0000000000001 ));}/** 复数的四则运算*///a+bpublic static Complex operator+(Complex a,Complex b){return new Complex(a.Re + b.Re, a.Im + b.Im);}public static Complex operator +(double a, Complex b){return new Complex(a + b.Re, b.Im);}public static Complex operator +(Complex a, double b){return new Complex(a.Re + b, a.Im );}//a-bpublic static Complex operator-(Complex a,Complex b){return new Complex(a.Re - b.Re, a.Im - b.Im);}public static Complex operator -(double a, Complex b){return new Complex(a - b.Re, b.Im);}public static Complex operator -(Complex a, double b){return new Complex(a.Re - b, a.Im);}public static Complex operator -(Complex a){return new Complex(-a.Re, -a.Im);}//a*bpublic static Complex operator *(Complex a,Complex b){return new Complex(a.Re * b.Re - a.Im * b.Im, a.Re * b.Im + a.Im * b.Re);}public static Complex operator *(double a,Complex b){return new Complex(a * b.Re , a * b.Im);}public static Complex operator *(Complex a, double b){return new Complex(a.Re * b, a.Im * b);}//a/bpublic static Complex operator/(Complex a,Complex b){double m = b.ModulusSquare();return new Complex((a.Re * b.Re + a.Im * b.Im) / m, (a.Im * b.Re - a.Re * b.Im) / m);}public static Complex operator /(double a, Complex b){double m = b.ModulusSquare();return new Complex(a * b.Re / m, -a * b.Im / m);}public static Complex operator /(Complex a, double b){return new Complex(a.Re/ b, a.Im/b);}/// <summary>/// 将复数类型强制转换为平面向量类型/// </summary>/// <param name="a"></param>public static implicit operator Vector2(Complex a)//{return new Vector2(a.Re, a.Im);}/// <summary>/// 将一个实数类型强制转换为一个仅有实部的复数类型(事实上一般是不必要的,因为所有复数四则运算都重载了以实数为参数之一)/// </summary>public static implicit operator Complex(double a){return new Complex(a, 0);}/// <summary>/// 返回复数的字符串形式/// </summary>/// <returns></returns>public override string ToString(){if(Im>0){return Re.ToString() + "+" + Im.ToString() + "i";}else{return Re.ToString() + Im.ToString() + "i";}}}/// <summary>/// 复数域的数学函数类/// </summary>public class MathX{/// <summary>/// 指数函数,返回以e为底的指定复数次幂/// </summary>/// <param name="a">一个复数</param>/// <returns></returns>public static Complex Exp(Complex a){return Math.Exp(a.Re) * new Complex(Math.Cos(a.Im), Math.Sin(a.Im));}/// <summary>/// 余弦函数,返回指定复数的余弦值/// </summary>/// <param name="a">一个复数</param>/// <returns></returns>public static Complex Cos(Complex a){return new Complex(Math.Cos(a.Re) * Math.Cosh(a.Im), Math.Sin(a.Re) * Math.Sinh(a.Im));}/// <summary>/// 正弦函数,返回指定复数的正弦值/// </summary>/// <param name="a">一个复数</param>/// <returns></returns>public static Complex Sin(Complex a){return new Complex(Math.Sin(a.Re) * Math.Cosh(a.Im), Math.Cos(a.Re) * Math.Sinh(a.Im));}/// <summary>/// 正切函数,返回指定复数的正切值/// </summary>/// <param name="a">一个复数</param>/// <returns></returns>public static Complex Tan(Complex a){return Sin(a) / Cos(a);}/// <summary>/// 余切函数,返回指定复数的余切值/// </summary>/// <param name="a">一个复数</param>/// <returns></returns>public static Complex Cot(Complex a){return Cos(a) / Sin(a);}/// <summary>/// 正割函数,返回指定复数的正割值/// </summary>/// <param name="a">一个复数</param>/// <returns></returns>public static Complex Sec(Complex a){return 1 / Cos(a);}/// <summary>/// 余割函数,返回指定复数的余割值/// </summary>/// <param name="a">一个复数</param>/// <returns></returns>public static Complex Csc(Complex a){return 1 / Csc(a);}/// <summary>/// 对数函数,返回以e为底的指定复数的对数/// </summary>/// <param name="a">一个复数</param>/// <returns></returns>public static Complex Log(Complex a){double m = a.Modulus();if(m>0){return new Complex(Math.Log(a.Modulus()), a.Arg());}else{return new Complex(0, a.Arg());}}/// <summary>/// 返回指定复数的平方根/// </summary>/// <param name="a">一个复数</param>/// <returns></returns>public static Complex Sqrt(Complex a){double m = a.Modulus();return new Complex(Math.Sqrt((m + a.Re) / 2), a.Im > 0 ? Math.Sqrt((m - a.Re) / 2) : -Math.Sqrt((m - a.Re) / 2)); }/// <summary>/// 指数函数,返回指定复数为底,指定复数次幂/// </summary>/// <param name="a">指数</param>/// <param name="b">底数</param>/// <returns></returns>public static Complex Pow(Complex a,Complex b){return Exp(b * Log(a));}/// <summary>/// 返回指定底的对数/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <returns></returns>public static Complex Log(Complex a,Complex b){return Log(a) / Log(b);}/// <summary>/// 反正弦函数/// </summary>/// <param name="a"></param>/// <returns></returns>public static Complex Asin(Complex a){Complex i = new Complex(0, 1);return -i * Log(Sqrt(1 - a * a) + i * a);}/// <summary>/// 反余弦函数/// </summary>/// <param name="a"></param>/// <returns></returns>public static Complex Acos(Complex a){Complex i = new Complex(0, 1);return -i * Log(a + i * Sqrt(1 - a * a));}/// <summary>/// 反正切函数/// </summary>/// <param name="a"></param>/// <returns></returns>public static Complex Atan(Complex a){Complex i = new Complex(0, 1);return 0.5 * i * Log((i + a) / (i - a));}}
水平有限,若有错误敬请批评指正。
【C#】封装的复数运算类库及拓展到复数域的Math类相关推荐
- 【C语言】复数的四则运算与复数运算的头文件
目录 一.复数的四则运算 二.复数的头文件#include<complex.h> 三.一些碎碎念 一.复数的四则运算 (1)计算方法 加法:(a+bi)+(c+di)=(a+c)+(c+d ...
- 简单的复数运算(类和对象)_JAVA
Description 设计一个类Complex,用于封装对复数的下列操作: 成员变量:实部real,虚部image,均为整数变量: 构造方法:无参构造方法.有参构造方法(参数2个) 成员方法:含两个 ...
- java简单的复数类_Java练习 SDUT-4303_简单的复数运算(类和对象)
简单的复数运算(类和对象) Time Limit: 2000 ms Memory Limit: 65536 KiB Problem Description 设计一个类Complex,用于封装对复数的下 ...
- (python)7-4 sdut-oop-1 简单的复数运算 (10 分)
设计一个类Complex,用于封装对复数的下列操作: 成员变量:实部real,虚部image,均为整数变量: 构造方法:无参构造方法.有参构造方法(参数2个) 成员方法:含两个复数的加.减.乘操作.复 ...
- 实训C++语言设计——实现复数运算
平台:VC++ 2005 测试通过! .vcproj 这是使用应用程序向导生成的 VC++ 项目的主项目文件. 它包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台 ...
- 在C#代码中应用Log4Net(五)将Log4Net正确地封装在自己的类库中并进行调用
前面的几篇文章已经比较完整地解释了怎么使用Log4Net,但是我们可能需要将Log4Net的日志类封装在自己的类库中,以便C/S或B/S程序进行调用.下面的示例程序简单地分为两层,一个是应用程序层We ...
- c语言 单词变复数_一些复数运算的C语言实现
1 /*file ComplexCalculation.c2 *author Vincent Cui3 *e-mail whcui1987@163.com4 *version 0.15 *data 2 ...
- 【Python】Python里的复数运算
复数的基本知识不谈,这里只简单介绍一下Python在复数运算中能做什么. 调用的运算代码: z1 = 8 + 9j z2 = 3 + 4j# 实部 print(z1.real)# 虚部 print(z ...
- oracle日期虚数0去掉,第 14 章 使用复数运算库
第 14 章 使用复数运算库 复数是由实部和虚部组成的数.例如: 3.2 + 4i 1 + 3i 1 + 2.3i 在特例情况下,如 0 + 3i 是纯虚数,通常写为 3i:5 + 0i 是纯实数,通 ...
最新文章
- 简述网络文件系统NFS,并说明其作用。
- Python闭包与延迟绑定
- 思科、华为、华三、Juniper路由协议优先级汇总
- JZOJ 5400. 【NOIP2017提高A组模拟10.7】Repulsed
- jdk10 换成jdk8_JDK 10的摘要Javadoc标签
- Qt ModbusTCP ModbusRTU 使用同步读和异步写
- python beautifulreport_Python unittest 之 BeautifulReport可视化报告
- Spring mvc @SessionAttribute
- 吴恩达教授机器学习笔记【一】- 线性回归(2)
- UIImagePickerController 获取相片视频
- bgp 建立邻居发送的报文_HCIE笔记-------BGP邻居状态详解
- chrome扩展程序安装_如何在Windows上删除“由企业策略安装”的Chrome扩展程序
- ps快捷键及相关基础知识总结(持续ing)
- 自助装机配置专家点评3
- almost unreal歌词翻译_Almost Lover歌词
- 用PS绘制立体字的效果教程
- nginx安全漏洞(CVE-2021-23017)修复
- Js数组里删除指定的元素(不是指定的位置)
- 第13节 eclipse简介
- 彻底读懂行为经济学名著《思考,快与慢》
热门文章
- 计科1705露营活动策划案
- CSDN社区电子杂志项目(CSDN eMag)所有期刊总索引
- el表达式ne什么意思_EL表达式的基本语法及运算符
- VScode下载很慢解决办法
- hive编程中的细枝末节
- 论文笔记-DeepLung: Deep 3D Dual Path Nets for Automated Pulmonary Nodule Detection and Classification
- git clone加速命令 nslookup github.com | nslookup github.global.ssl.fastly.Net
- python创建网盘_超简单!基于Python搭建个人“云盘”
- java对象克隆效率_fastclone
- mht转换html delphi,delphi – 创建*. Mht文件(网络档案)