C#复数类Complex的封装

C#复数类Complex的封装

----------------------------------------------------------------------------------------------------------------------------------------------------------本文作者:随煜而安  
时间:   二零一五年七月二十日
----------------------------------------------------------------------------------------------------------------------------------------------------------
本文给出使用C#语言对于复数类Complex的封装。包括大多数基本的运算及方法,个人感觉总结的蛮全的。话不多说,直接上代码!

/// <summary>/// 复数类/// </summary>public class Complex{#region 字段//复数实部private double real = 0.0;//复数虚部private double imaginary = 0.0;#endregion#region 属性/// <summary>/// 获取或设置复数的实部/// </summary>public double Real{get{return real;}set{real = value;}}/// <summary>/// 获取或设置复数的虚部/// </summary>public double Imaginary{get{return imaginary;}set{imaginary = value;}}#endregion#region 构造函数/// <summary>/// 默认构造函数,得到的复数为0/// </summary>public Complex():this(0,0){}/// <summary>/// 只给实部赋值的构造函数,虚部将取0/// </summary>/// <param name="dbreal">实部</param>public Complex(double dbreal):this(dbreal,0){}/// <summary>/// 一般形式的构造函数/// </summary>/// <param name="dbreal">实部</param>/// <param name="dbImage">虚部</param>public Complex(double dbreal, double dbImage){real = dbreal;imaginary = dbImage;}/// <summary>/// 以拷贝另一个复数的形式赋值的构造函数/// </summary>/// <param name="other">复数</param>public Complex(Complex other){real = other.real;imaginary = other.imaginary;}#endregion#region 重载//加法的重载public static Complex operator +(Complex comp1, Complex comp2){return comp1.Add(comp2);}//减法的重载public static Complex operator -(Complex comp1, Complex comp2){return comp1.Substract(comp2);}//乘法的重载public static Complex operator *(Complex comp1, Complex comp2){return comp1.Multiply(comp2);}//==的重载public static bool operator ==(Complex z1, Complex z2){return ((z1.real == z2.real) && (z1.imaginary == z2.imaginary));}//!=的重载public static bool operator !=(Complex z1, Complex z2){if (z1.real == z2.real){return (z1.imaginary != z2.imaginary);}return true;}/// <summary>/// 重载ToString方法,打印复数字符串/// </summary>/// <returns>打印字符串</returns>public override string ToString(){if (Real == 0 && imaginary == 0){return string.Format("{0}", 0);}if (Real == 0 && (imaginary != 1 && imaginary != -1)){return string.Format("{0} i", imaginary);}if (imaginary == 0){return string.Format("{0}", Real);}if (imaginary == 1){return string.Format("i");}if (imaginary == -1){return string.Format("- i");}if (imaginary < 0){return string.Format("{0} - {1} i", Real, -imaginary);}return string.Format("{0} + {1} i", Real, imaginary);}#endregion#region 公共方法/// <summary>/// 复数加法/// </summary>/// <param name="comp">待加复数</param>/// <returns>返回相加后的复数</returns>public Complex Add(Complex comp){double x = real + comp.real;double y = imaginary + comp.imaginary;return new Complex(x, y);}/// <summary>/// 复数减法/// </summary>/// <param name="comp">待减复数</param>/// <returns>返回相减后的复数</returns>public Complex Substract(Complex comp){double x = real - comp.real;double y = imaginary - comp.imaginary;return new Complex(x, y);}/// <summary>/// 复数乘法/// </summary>/// <param name="comp">待乘复数</param>/// <returns>返回相乘后的复数</returns>public Complex Multiply(Complex comp){double x = real * comp.real - imaginary * comp.imaginary;double y = real * comp.imaginary + imaginary * comp.real;return new Complex(x, y);}/// <summary>/// 获取复数的模/幅度/// </summary>/// <returns>返回复数的模</returns>public double GetModul(){return Math.Sqrt(real * real + imaginary * imaginary);}/// <summary>/// 获取复数的相位角,取值范围(-π,π]/// </summary>/// <returns>返回复数的相角</returns>public double GetAngle(){#region 原先求相角的实现,后发现Math.Atan2已经封装好后注释实部和虚部都为0//if (real == 0 && imaginary == 0)//{//    return 0;//}//if (real == 0)//{//    if (imaginary > 0)//        return Math.PI / 2;//    else//        return -Math.PI / 2;//}//else//{//    if (real > 0)//    {//        return Math.Atan2(imaginary, real);//    }//    else//    {//        if (imaginary >= 0)//            return Math.Atan2(imaginary, real) + Math.PI;//        else//            return Math.Atan2(imaginary, real) - Math.PI;//    }//}#endregionreturn Math.Atan2(imaginary, real);}/// <summary>/// 获取复数的共轭复数/// </summary>/// <returns>返回共轭复数</returns>public Complex Conjugate(){return new Complex(this.real, -this.imaginary);}#endregion}


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速傅里叶变换(FFT)

快速傅里叶变换&#xff08;FFT&#xff09; ------------------------------------------------------------------------------------------------------------------- 作者&#xff1a;随煜而安 时间&#xff1a;2015/7/21 注&#xff1a;本文为作者原创文章&#xff0c…

快速傅里叶变换(FFT)的C#实现及详细注释

快速傅里叶变换&#xff08;FFT&#xff09;的C#实现及详细注释 ------------------------------------------------------------------------------------------------------------------- 作者&#xff1a;随煜而安 时间&#xff1a;2015/7/21 注&#xff1a;本文为作者原创文…

风机桨叶故障诊断(一) 样本的获取

风机桨叶故障诊断&#xff08;一&#xff09; 样本的获取今天团队接了个新项目&#xff0c;做一个风机桨叶故障诊断系统。虽然马上就是准备考研的关键期了&#xff0c;可是一想到这是我学习了机器学习后遇到的第一个实际项目&#xff0c;我觉得参与进来&#xff0c;也帮导师分担…

风机桨叶故障诊断(二) 获取图像几何主方向

风机桨叶故障诊断&#xff08;二&#xff09; 获取图像几何主方向 昨天&#xff0c;我将视频资源按帧抽取并筛选得到了可以用来提取样本的图像库。今天还是进行项目的准备工作。当我们拿到一张图片&#xff0c;我们的软件要做的大致可以分为三个步骤&#xff1a;从原图中识别桨…

风机桨叶故障诊断(三) 识别桨叶——初步构建BP神经网络

风机桨叶故障诊断&#xff08;三&#xff09; 识别桨叶——初步构建BP神经网络 新的一天&#xff0c;希望有好的运气。今天开始着手系统的第一个模块&#xff0c;从一幅图像中寻找到桨叶所在的位置。第一直觉我们的识别任务属于难度比较大&#xff0c;干扰因素多的了&#xff…

风机桨叶故障诊断(四) 正负样本准备——从图像中随机扣图

风机桨叶故障诊断&#xff08;四&#xff09; 正负样本准备——从图像中随机扣图 在之前的工作中&#xff0c;我们已经训练了一个400252的三层BP神经网络&#xff0c;通过这个基础的神经网络进行了误差分析&#xff0c;对我们的问题有了更深刻的认识。现在我们要开始不断完善我…

风机桨叶故障诊断(五) 修改隐含层神经元个数的尝试

风机桨叶故障诊断&#xff08;五&#xff09; 修改隐含层神经元个数的尝试 我们已经为训练一个更为稳健的神经网络做好了样本的准备工作&#xff0c;那么我们开始下一步的工作吧&#xff01; 我们已经有了样本集&#xff0c;目前我筛选出来了247个正样本&#xff0c;652个负样本…

风机桨叶故障诊断(六) 利用自编码器进行特征学习

风机桨叶故障诊断&#xff08;六&#xff09; 利用自编码器进行特征学习 在之前的工作中&#xff0c;我已经初步构建了三层的BP神经网络&#xff0c;并已经从样本集的选取&#xff0c;模型的选择&#xff08;隐含层神经元个数&#xff09;&#xff0c;和输出层神经元阈值选择这…

风机桨叶故障诊断(七) 滑动窗与非极大值抑制NMS

风机桨叶故障诊断&#xff08;七&#xff09;滑动窗与非极大值一直NMS 到目前为止&#xff0c;我已经利用自编码神经网络提取特征后训练得到了BP神经网络&#xff08;参见&#xff1a;点击打开链接&#xff09;&#xff0c;且在测试样本集上表现不错。下面我们就要应用到实际中…

Distinctive Image Features from Scale-Invariant Keypoints-SIFT算法译文

本文全篇转载自如下博客&#xff0c;感谢博主的无私分享 http://www.cnblogs.com/cuteshongshong/archive/2012/05/25/2506374.html ------------------------------------------------------------------------------------------------------ 从尺度不变的关键点选择可区分的…

将图像绘制成3维立体散点图

matlab源代码&#xff1a; Iimread(F:\绝缘子识别\绝缘子红外test图片\test (50).jpg); Irgb2gray(I); [wd,len]size(I); interval10; %设置绘制散点图的间隔&#xff0c;全部绘出会很卡 x[]; y[]; z[]; numfloor((len-1)/interval)1;%计算在当前间隔下图像的每一行…

二叉树的非递归遍历|前中后序遍历

二叉树的非递归遍历 文章目录 二叉树的非递归遍历前序遍历-栈层序遍历-队列中序遍历-栈后序遍历-栈 前序遍历-栈 首先我们应该创建一个Stack 用来存放节点&#xff0c;首先我们想要打印根节点的数据&#xff0c;此时Stack里面的内容为空&#xff0c;所以我们优先将头结点加入S…

C#灰度图转伪彩色图

/// <summary>/// 伪彩色图像构造器/// </summary>public class PseudoColorImageBuilder{/// <summary>/// 铁红色带映射表/// 每一行代表一个彩色分类&#xff0c;存放顺序是RGB/// </summary>public static byte[,] ironTable new byte[128, 3] {{…

砥志研思SVM(二) 拉格朗日乘子法与KKT条件

[1]最优化问题中的对偶性理论 [2]拉格朗日乘子法(上) [3]拉格朗日乘子法(下)