Funktion implementieren

schlelia

Aktives Mitglied
Hallo,
ich muss folgende Funktion (innerhalb einer größeren Aufgabe) implementieren : F(x) = x^n - a.
Java:
public static double power(double x, int n) {
        double sol = x;
        for (int i = 1; i < n; i++) {
           sol = sol * x;
        }
        return sol;
    }
    public static double function(double x, int n, double a) {
        return (power(x,n)) - a;
    }
Ich hab die dann einfach so implementiert. Power ist einfach die Potenzfunktion statt Math.pow().
Das hier ist der Test dazu:
Java:
@Test(timeout = 666)
    public void pubTest_function() {
        for (int pass = 0; pass < 42; pass++) {
            double x = 666.0815 + RND.nextDouble() * 4711;
            int n = 2 + RND.nextInt(42);
            double a = 666.0815 + RND.nextDouble() * 4711;
            double other = NewtonIteration.derivedFunction(x, n, a);
            double actual = NewtonIteration.function(x, n, a);
            assertEquals(NewtonIterationPublicTest.EX_function + "(" + x + ", " + n + ", " + a + ")", other * x / n - a, actual, (other * x / n - a) * 1e-12);
        }
        double actual = NewtonIteration.function(0.815d, 42, -0.665814382223034268d);
        assertEquals(NewtonIterationPublicTest.EX_function + "(0.815d, 42, -0.665814382223034268d)", 0.666d, actual, 1e-12);

Bei den eingesetzten Werten (1403.8448884058157, 5, 1373.8992853720163) kommt z.B. bei mir 5.452499382183306E15 raus. Es soll aber 1969406.5714177652 rauskommen. Was mache ich falsch?
 
K

kneitzel

Gast
Es soll aber 1969406.5714177652 rauskommen
Wie kommst Du auf die Idee? Das ist definitiv falsch.

Du hast ja ein 1.403 * 10^3 Wert. Der dann hoch 5 bedeutet, dass da ein Wert mit 10^15 rauskommen muss. Davon etwas abziehen, das 4 Stellen hat: Kann man also vernachlässigen.

Da wird also niemals ein Ergebnis raus kommen in der Größenordnung 10^7

Du rechnest die angegebene Formel richtig aus, Die Werte scheinen stimmig (ohne nachgerechnet zu haben). und wenn ich den erwarteten Wert anschaue, dann kann der gar nicht stimmen!
 

schlelia

Aktives Mitglied
Wie kommst Du auf die Idee? Das ist definitiv falsch.

Du hast ja ein 1.403 * 10^3 Wert. Der dann hoch 5 bedeutet, dass da ein Wert mit 10^15 rauskommen muss. Davon etwas abziehen, das 4 Stellen hat: Kann man also vernachlässigen.

Da wird also niemals ein Ergebnis raus kommen in der Größenordnung 10^7

Du rechnest die angegebene Formel richtig aus, Die Werte scheinen stimmig (ohne nachgerechnet zu haben). und wenn ich den erwarteten Wert anschaue, dann kann der gar nicht stimmen!
MMh. Aber der Test schlägt trotzdem fehl
 

schlelia

Aktives Mitglied
Wie kommst Du auf die Idee? Das ist definitiv falsch.

Du hast ja ein 1.403 * 10^3 Wert. Der dann hoch 5 bedeutet, dass da ein Wert mit 10^15 rauskommen muss. Davon etwas abziehen, das 4 Stellen hat: Kann man also vernachlässigen.

Da wird also niemals ein Ergebnis raus kommen in der Größenordnung 10^7

Du rechnest die angegebene Formel richtig aus, Die Werte scheinen stimmig (ohne nachgerechnet zu haben). und wenn ich den erwarteten Wert anschaue, dann kann der gar nicht stimmen!
Also die ganze Aufgabe ist eigentlich das Newtonverfahren anzuwenden für die nte Wurzel aus a.
 

Neue Themen


Oben