一. 复数
关于数学中复数的概念和作用,可以百度搜索相关的内容。
把运算法则 复制一下:
复数有两个属性, 实部 real 和虚部 imag.
一.一 复数 模的大小 magnitude()
/** * * @return 返回复数的大小 */ public double magnitude(){ double d= Math.sqrt(this.real*this.real+this.imag*this.imag); //四位小数,并且去0 return Double.valueOf(new BigDecimal(d). setScale(4, BigDecimal.ROUND_HALF_UP).stripTrailingZeros() .toString()); }
一.二 是否为纯虚数 pure()
/** * * @return 是否是纯虚数。 实部为0,虚部不为0,才是纯虚数 */ public boolean pure(){ return pure(this); } /** * * @param other * @return 是否是纯虚数。 实部为0,虚部不为0,才是纯虚数 */ public static boolean pure(Complex other){ if(other.getReal()==0&&other.getImag()!=0){ return true; } return false; }
一.三 是否为共轭复数 conjugate()
/** * * @return 是否是共轭复数。 实部相同,虚部互为相反数 */ public boolean conjugate(Complex other){ return conjugate(this,other); } /** * * @param c1 * @param c2 * @return 是否是共轭复数。 实部相同,虚部互为相反数 */ public static boolean conjugate(Complex c1,Complex c2){ if(c1.getReal()==c2.getReal()&&(c1.getImag()+c2.getImag())==0){ return true; } return false; }
一.四 复数加法 add()
/** * * @param other * @return 复数相加 */ public Complex add(Complex other){ return add(this,other); } /** * * @param c1 * @param c2 * @return 静态方法,实现两个复数相加 */ public static Complex add(Complex c1,Complex c2){ //新的实部 double r=c1.getReal()+c2.getReal(); //新的虚部 double i=c1.getImag()+c2.getImag(); //相加后的复数 return new Complex(r,i); }
一.五 复数的减法 substract()
/** * * @param other * @return 复数相减 */ public Complex substract(Complex other){ return substract(this,other); } /** * * @param c1 * @param c2 * @return 静态方法,实现两个复数相减 */ public static Complex substract(Complex c1,Complex c2){ //新的实部 double r=c1.getReal()-c2.getReal(); //新的虚部 double i=c1.getImag()-c2.getImag(); //相减后的复数 return new Complex(r,i); }
一.六 复数乘法 multiply ()
/** * * @param other * @return 复数相乘 */ public Complex multiply(Complex other){ return multiply(this,other); } /** * * @param c1 * @param c2 * @return 静态方法,实现两个复数相乘 */ public static Complex multiply(Complex c1,Complex c2){ //新的实部 double r=c1.getReal()*c2.getReal()-c1.getImag()*c2.getImag(); //新的虚部 double i=c1.getReal()*c2.getImag()+c1.getImag()*c2.getReal(); //相乘后的复数 return new Complex(r,i); }
一.七 复数除法 divide()
/** * * @param other * @return 复数相除 */ public Complex divide(Complex other){ return divide(this,other); } /** * * @param c1 * @param c2 * @return 静态方法,实现两个复数相除 */ public static Complex divide(Complex c1,Complex c2){ //如果为0,表示除以0, 产生除0异常。 if(c2.getReal()==0&&c2.getImag()==0){ throw new ArithmeticException("除 0 异常"); } //新的实部 double r=(c1.getReal()*c2.getReal()+c1.getImag()*c2.getImag())/(c2.getReal()*c2.getReal()+c2.getImag()*c2.getImag()); //新的虚部 double i=(c1.getImag()*c2.getReal()-c1.getReal()*c2.getImag())/(c2.getReal()*c2.getReal()+c2.getImag()*c2.getImag()); //相乘后的复数 return new Complex(r,i); }
一.八 复数比较是否相同 equals() 和hashcode()
/** * * @param o * @return 比较两个复数是否相同 */ @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Complex complex = (Complex) o; return Double.compare(complex.real, real) == 0 && Double.compare(complex.imag, imag) == 0; } @Override public int hashCode() { return Objects.hash(real, imag); }
一.九 打印复数 toString()
/** * * @return 打印展示复数 */ @Override public String toString() { StringBuilder sb=new StringBuilder(); //保留四位小数,并且去0. String tempR=new BigDecimal(this.real). setScale(4, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toString(); sb.append(tempR); //如果虚部为正,需要添加一个+号。 为-时,不需要添加 if(this.imag>0){ sb.append("+"); } //如果为0,返回实部 if(this.imag==0){ return sb.toString(); } //添加虚部, 复数后面的 i是固定的 String tempI=new BigDecimal(this.imag). setScale(4, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toString(); sb.append(tempI); sb.append("i"); return sb.toString(); }
二. 复数的汇总和测试
二.一 复数类 Complex
package com.yjl.collection; import java.math.BigDecimal; import java.util.Objects; /** * package: com.yjl.collection * className: Complex * Description: 数学中复数类 * * @author : yuezl * @Date :2020/6/11 7:54 */ public class Complex { /** * @param real 实部 * @param imag 虚部 */ private double real; private double imag; public Complex() { } public Complex(double real, double imag) { this.real = real; this.imag = imag; } /** * * @return 返回复数的大小 */ public double magnitude(){ double d= Math.sqrt(this.real*this.real+this.imag*this.imag); //四位小数,并且去0 return Double.valueOf(new BigDecimal(d). setScale(4, BigDecimal.ROUND_HALF_UP).stripTrailingZeros() .toString()); } /** * * @return 是否是纯虚数。 实部为0,虚部不为0,才是纯虚数 */ public boolean pure(){ return pure(this); } /** * * @param other * @return 是否是纯虚数。 实部为0,虚部不为0,才是纯虚数 */ public static boolean pure(Complex other){ if(other.getReal()==0&&other.getImag()!=0){ return true; } return false; } /** * * @return 是否是共轭复数。 实部相同,虚部互为相反数 */ public boolean conjugate(Complex other){ return conjugate(this,other); } /** * * @param c1 * @param c2 * @return 是否是共轭复数。 实部相同,虚部互为相反数 */ public static boolean conjugate(Complex c1,Complex c2){ if(c1.getReal()==c2.getReal()&&(c1.getImag()+c2.getImag())==0){ return true; } return false; } /** * * @param other * @return 复数相加 */ public Complex add(Complex other){ return add(this,other); } /** * * @param c1 * @param c2 * @return 静态方法,实现两个复数相加 */ public static Complex add(Complex c1,Complex c2){ //新的实部 double r=c1.getReal()+c2.getReal(); //新的虚部 double i=c1.getImag()+c2.getImag(); //相加后的复数 return new Complex(r,i); } /** * * @param other * @return 复数相减 */ public Complex substract(Complex other){ return substract(this,other); } /** * * @param c1 * @param c2 * @return 静态方法,实现两个复数相减 */ public static Complex substract(Complex c1,Complex c2){ //新的实部 double r=c1.getReal()-c2.getReal(); //新的虚部 double i=c1.getImag()-c2.getImag(); //相减后的复数 return new Complex(r,i); } /** * * @param other * @return 复数相乘 */ public Complex multiply(Complex other){ return multiply(this,other); } /** * * @param c1 * @param c2 * @return 静态方法,实现两个复数相乘 */ public static Complex multiply(Complex c1,Complex c2){ //新的实部 double r=c1.getReal()*c2.getReal()-c1.getImag()*c2.getImag(); //新的虚部 double i=c1.getReal()*c2.getImag()+c1.getImag()*c2.getReal(); //相乘后的复数 return new Complex(r,i); } /** * * @param other * @return 复数相除 */ public Complex divide(Complex other){ return divide(this,other); } /** * * @param c1 * @param c2 * @return 静态方法,实现两个复数相除 */ public static Complex divide(Complex c1,Complex c2){ //如果为0,表示除以0, 产生除0异常。 if(c2.getReal()==0&&c2.getImag()==0){ throw new ArithmeticException("除 0 异常"); } //新的实部 double r=(c1.getReal()*c2.getReal()+c1.getImag()*c2.getImag())/(c2.getReal()*c2.getReal()+c2.getImag()*c2.getImag()); //新的虚部 double i=(c1.getImag()*c2.getReal()-c1.getReal()*c2.getImag())/(c2.getReal()*c2.getReal()+c2.getImag()*c2.getImag()); //相乘后的复数 return new Complex(r,i); } /** * * @param o * @return 比较两个复数是否相同 */ @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Complex complex = (Complex) o; return Double.compare(complex.real, real) == 0 && Double.compare(complex.imag, imag) == 0; } @Override public int hashCode() { return Objects.hash(real, imag); } /** * * @return 打印展示复数 */ @Override public String toString() { StringBuilder sb=new StringBuilder(); //保留四位小数,并且去0. String tempR=new BigDecimal(this.real). setScale(4, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toString(); sb.append(tempR); //如果虚部为正,需要添加一个+号。 为-时,不需要添加 if(this.imag>0){ sb.append("+"); } //如果为0,返回实部 if(this.imag==0){ return sb.toString(); } //添加虚部, 复数后面的 i是固定的 String tempI=new BigDecimal(this.imag). setScale(4, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toString(); sb.append(tempI); sb.append("i"); return sb.toString(); } /** * * @return 返回实部 */ public double getReal() { return real; } /** * 设置实部 * @param real */ public void setReal(double real) { this.real = real; } /** * * @return 返回虚部 */ public double getImag() { return imag; } /** * * @param imag 设置虚部 */ public void setImag(double imag) { this.imag = imag; } }
二.二 测试
package com.yjl.collection; /** * package: com.yjl.collection * className: ComplexTest * Description: 请输入相应的描述 * * @author : yuezl * @Date :2020/6/11 8:12 */ public class ComplexTest { public static void main(String[] args) { //1. 第一个复数, 实部为2,虚部为7 Complex c1=new Complex(2,7); //2. 第二个复数, 实部为3,虚部为-6 Complex c2=new Complex(3,-6); //3. 第三个复数,实部为2,虚部为-7. Complex c3=new Complex(2,-7); //4. 第四个复数,看是否相同 Complex c4=new Complex(2,7); System.out.println("c1打印输出:"+c1.toString()); System.out.println(c1.toString()+"+"+c2.toString()+"="+Complex.add(c1,c2)); System.out.println(c1.toString()+"-"+c2.toString()+"="+Complex.substract(c1,c2)); System.out.println(c1.toString()+"*"+c2.toString()+"="+Complex.multiply(c1,c2)); System.out.println(c1.toString()+"/"+c2.toString()+"="+Complex.divide(c1,c2)); System.out.println(c3.toString()+"的大小模为:"+c1.magnitude()); System.out.println(c3.toString()+"是否为纯虚函数:"+c1.pure()); System.out.println(c1.toString()+"与"+c3.toString()+"是否为共轭复数:"+c1.conjugate(c3)); System.out.println(c1.toString()+"与"+c4.toString()+"是否相同:"+c1.equals(c4)); } }
运行程序,控制台打印输出:
谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!