using System; using System.Collections.Generic; using System.Text; namespace CommonLib.math { /// /// 复数类 /// public class Complex { /// /// 默认构造函数 /// public Complex() : this(0, 0) { } /// /// 只有实部的构造函数 /// /// 实部 public Complex(double real) : this(real, 0) { } /// /// 由实部和虚部构造 /// /// 实部 /// 虚部 public Complex(double real, double image) { this.real = real; this.image = image; } private double real; /// /// 复数的实部 /// public double Real { get { return real; } set { real = value; } } private double image; /// /// 复数的虚部 /// public double Image { get { return image; } set { image = value; } } ///重载加法 public static Complex operator +(Complex c1, Complex c2) { return new Complex(c1.real + c2.real, c1.image + c2.image); } ///重载减法 public static Complex operator -(Complex c1, Complex c2) { return new Complex(c1.real - c2.real, c1.image - c2.image); } ///重载乘法 public static Complex operator *(Complex c1, Complex c2) { return new Complex(c1.real * c2.real - c1.image * c2.image, c1.image * c2.real + c1.real * c2.image); } /// /// 求复数的模 /// /// public double ToModul() { return Math.Sqrt(real * real + image * image); } /// /// 重载ToString方法 /// /// 打印字符串 public override string ToString() { if (Real == 0 && Image == 0) { return string.Format("{0}", 0); } if (Real == 0 && (Image != 1 && Image != -1)) { return string.Format("{0} i", Image); } if (Image == 0) { return string.Format("{0}", Real); } if (Image == 1) { return string.Format("i"); } if (Image == -1) { return string.Format("- i"); } if (Image < 0) { return string.Format("{0} - {1} i", Real, -Image); } return string.Format("{0} + {1} i", Real, Image); } } public struct complex//定义复数 { //复数a+bi中 //a为实部,b为虚部 public double a; public double b; public static complex commul(double x, complex y) { complex c = new complex(); c.a = x * y.a; c.b = x * y.b; return c; } public static complex commulcc(complex x, complex y) { complex c = new complex(); c.a = x.a * y.a - x.b * y.b; c.b = x.a * y.b + x.b * y.a; return c; } public static complex comsum(complex x, complex y) { complex c = new complex(); c.a = x.a + y.a; c.b = x.b + y.b; return c; } public static complex comsum1(double x, complex y) { complex c = new complex(); c.a = x + y.a; c.b = y.b; return c; } public static complex decrease(complex x, complex y) { complex c = new complex(); c.a = x.a * y.a - x.b * y.b; c.b = x.a * y.b + x.b * y.a; return c; } public static complex powcc(complex x, double n) { int k; complex xout; xout.a = 1; xout.b = 0; for (k = 1; k <= n; k++) { xout = complex.commulcc(xout, x); } return xout; } public void show() { //Console.Write(a+" + "+b+"i "); } } }