0

I've looked everywhere for code I can understand which could help me on my way. I've found one but I'm struggling, so I hope someone could help me.

This is what I want to achieve:

Solve a cubic function (ax^3+bx^2+cx+d) where a,b,c and d are filled in by the command line when you run it.

I need the roots and complex roots to be found using the Newton's Method. The code I'm struggling with is this, but I don't know if this works and I don't know how I can calculate all 3 roots (even knowing if it has multiplicity 1, 2 or 3).

Any help is appreciated.

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++;
            }
        }
    }
Micho
  • 3,929
  • 13
  • 37
  • 40
NickW
  • 25
  • 5
  • Why do you have a `Polynom` class? You could keep the exponents and coefficients in a `LinkedHashMap`. Anyways, have you looked into this? -> http://stackoverflow.com/questions/1829330/solving-a-cubic-equation – denvercoder9 Mar 14 '17 at 15:40
  • Polynom class is the class i run, finding the roots is only a part of what i want so i made a new class to find roots and a class for complexnumbers, following the object orientated programming. I am a beginner in java so i dont know what linkedhashmap is. The link you provided says something about solving it but i need to do it by using the Newton's Method. – NickW Mar 14 '17 at 16:01

0 Answers0