gpt4 book ai didi

java - 复数的指数形式

转载 作者:搜寻专家 更新时间:2023-10-31 08:27:45 25 4
gpt4 key购买 nike

我有以下问题:

我需要扩展下面的 Complex 类(代表复数)并添加具有指数形式的字段,另外从 Complex 重载方法:

class Complex{
public double re;
public double im;

public Complex(double r, double i){
re =r;
im = i;
}

public Complex add(Complex a,Complex b){
return new Complex(a.re + b.re,a.im + b.im );
}

public Complex sub(Complex a,Complex b){
return new Complex(a.re - b.re,a.im - b.im);
}

//more code
}

我的课如下

class ComplexE extends Complex{
public double exponential;
public ComplexE(double a, double b){
re=a;
im = b;
}
public ComplexE(double _exp){
super(0,0);
this.exponential = _exp;
}

public void setExpFromComplex(Complex comp){
double module = Math.sqrt(Math.pow(comp.re,2) + Math.pow(comp.im,2));
double fi = Math.atan2(comp.re,comp.im);
this.exponential = module * Math.pow(Math.E, fi);
}

public ComplexE add(ComplexE a,ComplexE b){
return new ComplexE(a.exponential + b.exponential );
}

}

我的问题是:我做得对吗?我求指数形式的方法是否正确?

编辑:我尝试使用的数学方法是:

z = |z|*(cos(phi) + i*sin(phi)) = |z|*e^(i*phi).

最佳答案

你有很多错误。首先,我假设指数是指极坐标,即 r*e^(i*theta)。除了直角复数和极坐标复数是同构的,也就是说,您可以将一个复数转换为另一个复数,然后再转换回来。

这表明您不应该让指数复数继承自常规复数...不同之处在于实现,即数字如何存储在内存中。换句话说,您的界面:

public interface IComplex {
public double getReal();
public double getImag();
public double getR();
public double getTheta();
public IComplex add(IComplex first, IComplex second);
public IComplex sub(IComplex first, IComplex second);
// Etc.
}

和矩形实现:

public class RectComplex implements IComplex {
private double realPart; // note privacy... use getters and setters
private double imagPart;

public RealComplex (double real, double imag) {
realPart = real;
imagPart = imag;
}

public double getReal() {
return realPart;
}

public double getR() {
return Math.sqrt(realPart * realPart + imagPart * imagPart);
}

// Etc.
}

和指数实现:

public class ExpComplex implements IComplex {
private double r;
private double theta;

public double getReal() {
return r * Math.cos(theta);
}

public double getR() {
return r;
}

// Etc.
}

这可以防止出现冗余字段。想一想 ArrayListLinkedList 之间的区别。它们都是列表,(上面都是复数),但从实现的角度来看它们的工作方式完全不同。但是使用这些类的任何代码都不会在意,但他们可能会根据性能选择正确的类。有道理吗?

关于java - 复数的指数形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13482204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com