由于C#没有提供复数(Complex)的运算类库,复数类需要自己定义。

我们主要呈现了两个类,Complex,并做了一个MathX,将三角函数、指对函数等拓展到复数域。

Complex类成员方法
Complex(double re, double im) 复数类构造函数
! 共轭运算符,返回共轭
+-*/ 四则运算符
Arg() Modulus()  ModulusSqure() 幅角,模长,模长平方
Complex(double a) 强制类型转换运算符
MathX类成员方法
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类相关推荐

  1. 【C语言】复数的四则运算与复数运算的头文件

    目录 一.复数的四则运算 二.复数的头文件#include<complex.h> 三.一些碎碎念 一.复数的四则运算 (1)计算方法 加法:(a+bi)+(c+di)=(a+c)+(c+d ...

  2. 简单的复数运算(类和对象)_JAVA

    Description 设计一个类Complex,用于封装对复数的下列操作: 成员变量:实部real,虚部image,均为整数变量: 构造方法:无参构造方法.有参构造方法(参数2个) 成员方法:含两个 ...

  3. java简单的复数类_Java练习 SDUT-4303_简单的复数运算(类和对象)

    简单的复数运算(类和对象) Time Limit: 2000 ms Memory Limit: 65536 KiB Problem Description 设计一个类Complex,用于封装对复数的下 ...

  4. (python)7-4 sdut-oop-1 简单的复数运算 (10 分)

    设计一个类Complex,用于封装对复数的下列操作: 成员变量:实部real,虚部image,均为整数变量: 构造方法:无参构造方法.有参构造方法(参数2个) 成员方法:含两个复数的加.减.乘操作.复 ...

  5. 实训C++语言设计——实现复数运算

    平台:VC++ 2005 测试通过! .vcproj 这是使用应用程序向导生成的 VC++ 项目的主项目文件. 它包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台 ...

  6. 在C#代码中应用Log4Net(五)将Log4Net正确地封装在自己的类库中并进行调用

    前面的几篇文章已经比较完整地解释了怎么使用Log4Net,但是我们可能需要将Log4Net的日志类封装在自己的类库中,以便C/S或B/S程序进行调用.下面的示例程序简单地分为两层,一个是应用程序层We ...

  7. c语言 单词变复数_一些复数运算的C语言实现

    1 /*file ComplexCalculation.c2 *author Vincent Cui3 *e-mail whcui1987@163.com4 *version 0.15 *data 2 ...

  8. 【Python】Python里的复数运算

    复数的基本知识不谈,这里只简单介绍一下Python在复数运算中能做什么. 调用的运算代码: z1 = 8 + 9j z2 = 3 + 4j# 实部 print(z1.real)# 虚部 print(z ...

  9. oracle日期虚数0去掉,第 14 章 使用复数运算库

    第 14 章 使用复数运算库 复数是由实部和虚部组成的数.例如: 3.2 + 4i 1 + 3i 1 + 2.3i 在特例情况下,如 0 + 3i 是纯虚数,通常写为 3i:5 + 0i 是纯实数,通 ...

最新文章

  1. 简述网络文件系统NFS,并说明其作用。
  2. Python闭包与延迟绑定
  3. 思科、华为、华三、Juniper路由协议优先级汇总
  4. JZOJ 5400. 【NOIP2017提高A组模拟10.7】Repulsed
  5. jdk10 换成jdk8_JDK 10的摘要Javadoc标签
  6. Qt ModbusTCP ModbusRTU 使用同步读和异步写
  7. python beautifulreport_Python unittest 之 BeautifulReport可视化报告
  8. Spring mvc @SessionAttribute
  9. 吴恩达教授机器学习笔记【一】- 线性回归(2)
  10. UIImagePickerController 获取相片视频
  11. bgp 建立邻居发送的报文_HCIE笔记-------BGP邻居状态详解
  12. chrome扩展程序安装_如何在Windows上删除“由企业策略安装”的Chrome扩展程序
  13. ps快捷键及相关基础知识总结(持续ing)
  14. 自助装机配置专家点评3
  15. almost unreal歌词翻译_Almost Lover歌词
  16. 用PS绘制立体字的效果教程
  17. nginx安全漏洞(CVE-2021-23017)修复
  18. Js数组里删除指定的元素(不是指定的位置)
  19. 第13节 eclipse简介
  20. 彻底读懂行为经济学名著《思考,快与慢》

热门文章

  1. 计科1705露营活动策划案
  2. CSDN社区电子杂志项目(CSDN eMag)所有期刊总索引
  3. el表达式ne什么意思_EL表达式的基本语法及运算符
  4. VScode下载很慢解决办法
  5. hive编程中的细枝末节
  6. 论文笔记-DeepLung: Deep 3D Dual Path Nets for Automated Pulmonary Nodule Detection and Classification
  7. git clone加速命令 nslookup github.com | nslookup github.global.ssl.fastly.Net
  8. python创建网盘_超简单!基于Python搭建个人“云盘”
  9. java对象克隆效率_fastclone
  10. mht转换html delphi,delphi – 创建*. Mht文件(网络档案)