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 ");
}
}
}