通过在Java中使用牛顿方法找到三次函数的所有复杂根

时间:2017-03-14 15:28:55

标签: java complex-numbers fractals newtons-method

我到处寻找可以理解的代码,这些代码可以帮助我。我找到了一个,但我正在挣扎,所以我希望有人可以帮助我。

这就是我想要实现的目标:

  

求解一个三次函数(ax ^ 3 + bx ^ 2 + cx + d),其中a,b,c和d被填充   在运行它时通过命令行输入。

我需要使用 Newton's Method 找到根和复杂的根。我遇到的代码就是这个,但我不知道这是否有效,我不知道如何计算所有3个根(甚至知道它是否具有多重性1,2或3 )。

感谢任何帮助。

import java.util.function.Function;

public class Newton {
    static double a = Polynom.geta(); // these are to get the input from the class you run from calling this class to solve the roots
    static double b = Polynom.getb();
    static double c = Polynom.getc();
    static double d = Polynom.getd();

    public static void main(String args[]) {
    }

    private Complex[] sqrt(double x, double y) { 
        Complex com = new Complex(x,y);             // Complex is my class that deals with Complexnumbers, com is supposed to get the value of the root in the end
        double tolerance = 1e-11;                   // tolerance for the error
        int iterations = 1, max = 512;
        Complex aa = com.pow(3).multiply(a);        // These put in the values from input to complex values and fill in the cubic function of ax^3+bx^2+cx+d 
        Complex bb = com.pow(2).multiply(b);
        Complex cc = com.multiply(c);
        Complex dd = com.pow(2).multiply(a).multiply(3.0);
        Complex ee = com.multiply(2.0).add(com);
        Complex function = aa.add(bb).add(cc).add(d,0);
        Complex derivative = dd.add(ee);

        for(int k = 0; k<3; k++) {
            while(iterations<max) {
                Complex difference = function.divide(derivative); //difference=fx/dx
                com = com.subtract(difference);
                if (Math.abs(difference.getReal()) < tolerance && Math.abs(difference.getImaginary()) < tolerance)
                    return com; // this is where i get an error atm "Cannot convert from Complex to Complex
                iterations++;
            }
        }
    }

0 个答案:

没有答案