Nullstellen einer Funktion 3. Grades mit Horner Schema

DeToXz

Neues Mitglied
Servus liebe Leute,
Ich bin dabei ein Programm zu schreiben, welches mir die Nullstellen einer Funktion 3. Grades berechnet. Ich soll es laut Aussage meines Lehrers mit dem Horner Schema versuchen. Dabei muss man die erste Nullstelle erraten in dem man sie in die Funktion an der Stelle von x einsetzt und wenn die Funktion dann = 0 ergibt hat man die 1. Nullstelle gefunden. Nun zu meinem Problem: Ich lasse das ganze mit einer for Schleife durchlaufen der die Zahl von -10 bis +10 in 0.01er Schritten erhöht und einsetzt. Jedoch sind die 0.01 nicht genau 0.01, das hatte mir mein Lehrer bereits mitgeteilt und jetzt komme ich nicht weiter, ich habe es mit Math.round versucht jedoch entweder an der falschen Stelle angewendet oder es hat nicht so geholfen wie ich es mir erhofft hatte. Da ich die erratene Zahl immer wieder verwenden muss, reicht es nicht sie einfach auf 2 Nachkommastellen auszugeben. Ich hoffe ihr könnt mir bei dem Problem etwas helfen.
MfG Marco

Java:
import java.util.Scanner;

public class XHoch3 {

public void Start(){
      
        Scanner sc = new Scanner(System.in);

        System.out.print("Gib den Wert fuer A ein: ");
        double a = sc.nextDouble();
      
        System.out.print("Gib den Wert fuer B ein: ");
        double b = sc.nextDouble();
      
        System.out.print("Gib den Wert fuer C ein: ");
        double c = sc.nextDouble();

        System.out.print("Gib den Wert fuer D ein: ");
        double d = sc.nextDouble();
      
        System.out.format("Kontrollausgabe:  f(x) = %-3.3fx^3 %+3.3f^2 %+3.3fx %+3.3f \n",a , b , c, d);
        sc.close();
            
          
        for (double i = -10.0; i <= 10.0;i+= 0.01) {
      
          
          
            double iH3 = Math.pow(i, 3);
            double iH2 = Math.pow(i, 2);
          
            if (a*iH3 + b*iH2 + c*i + d == 0) {
                System.out.println("Fertig");
                break;
            }
            else {
              
                System.out.print("i: " +i + " iH3: "+iH3 + " IH2: "+ iH2 + "\n");
              
            }
      
        }

}
}
 
Für genaue Fließkommaberechnungen gibt es die "BigDecimal" Klasse. Ggf. musst du dort dann auf 2 Stellen runden um auf 0 zu kommen.
 
Horner Methode geht doch so oder?
Java:
class Horner3rdPolynomial {
    public static void main(String[] args) {
        int x3 = 3;
        int x2 = 0;
        int x1 = -15;
        int x0 = 12;

        for (int i = -1000; i <= 1000; i++) {
            float flo = i / 100F;

            double y3 = x3;
            double y2 = (y3 * flo) + x2;
            double y1 = (y2 * flo) + x1;
            double y0 = (y1 * flo) + x0;

            if (y0 >= 0 && y0 <= 0.00001) {
                double z2 = (-y2 + Math.sqrt(y2 * y2 - 4 * y3 * y1)) / (2 * y3);
                double z3 = (-y2 - Math.sqrt(y2 * y2 - 4 * y3 * y1)) / (2 * y3);
                System.out.println("z1: " + flo);
                System.out.println("z2: " + z2);
                System.out.println("z3: " + z3);
            }
        }
    }
}

Das 0.00001 ist nach Zufall gewählt mehr weniger!

Das weicht zumindest nicht von WolframAlphas Ergebnis ab.
 
Allright, aber wie Epsilon/0.00001

gewählt werden muss, leuchtet mir noch nicht ein.

Epsilon steht meist immer für eine sehr kleine Schranke.

Ok, wenn du es einarbeiten konntest, ist es ok.
 

Zurück
Oben