FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Mathe

M2 Newton

M2 Newton 2003-05-22 13:00
Anonymer User
Moin,

konnte vieleiht jemand, da jetzt ja alle abgegeben haben, seinen Java-Quelltext zur Newton-Aufgabe posten?

Wär nett, da ich gern mal sehen würde wie man's hätte machen sollen und wir es in der Übungsgruppe nicht besprochen haben.

danke

Re: M2 Newton 2003-05-22 15:22
asdf
konnte vieleiht jemand, da jetzt ja alle abgegeben haben, seinen Java-Quelltext zur Newton-Aufgabe posten?

Geht auch C ? ( 102 lines of code )

<edit>
@Bjoern: Darf ich das ?
Die FAQ ist im Fall von schon abgebenen Loesungen nicht klar .
</edit>



Re: M2 Newton 2003-05-22 16:21
Anonymer User
ansonsten einfach mal bei google eingeben, da findet man zig beispiele. ausserdem ist das ja kaum der rede wert (siehe vorlage von tri). naja hab meinen code gerade nicht zur hand, aber das sin so um die 70 zeilen maximal.

Re: M2 Newton 2003-05-22 16:32
Felix
public class Newton { /** * Fhrt die in Aufgabe 4 geforderten Berechnungen durch * und gibt die Iterationsschritte auf der Konsole aus */ public static void main(String[] args) { newton(5, 1, 40); newton(5, 2, 40); newton(5, 3, 40); newton(5, 4, 40); } /** * Die Formel des Newton-Verfahrens * @param x0 der Startwert * @param fi die Funktion, fr die das Verfahren angewandt werden soll * @param maxIter Anzahl der maximalen Iterationen * @return die ermittelte Nullstelle */ public static double newton(double x0, int fi, int maxIter) { double epsilon = Math.pow(10, -8); // Ausgabe von x und f(x) System.out.print("x0: " + x0); System.out.println(", f(x0): " + f(x0, fi)); for(int i = 0; i < maxIter; i++) { // Berechnung von xn x0 = x0 - f(x0, fi) / fAb(x0, fi); // Ausgabe von x und f(x) System.out.print("x" + (i+1) + ": " + x0); System.out.println(", f(x" + (i+1) + "): " + f(x0, fi)); // Vergleich der Differenz von Funktionwert und Epsilon, // ggf Stopp der Iteration if(Math.abs(f(x0, fi)) < epsilon) break; } System.out.println("------------------------------------"); return x0; } /*--------------------------------------------- * Die Funktionen aus der Aufgabe, fi gibt an, * welche der 4 Funktionen benutzt werden soll *--------------------------------------------*/ private static double f(double x, int fi) { switch (fi) { case 1 : return Math.pow(Math.E, x) - 2; case 2 : return Math.pow(x, 3) - 6 * Math.pow(x, 2) + 12 * x - 7; case 3 : return Math.atan(x); case 4 : default : return 0.5 * Math.tan(x) + x - 2; } } /*----------------------------------------- * Die Ableitungen von f1, f2, f3, f4 * ------------------------------------- */ private static double fAb(double x, int fi) { switch (fi) { case 1 : return Math.pow(Math.E, x); case 2 : return 3 * Math.pow(x, 2) - 12 * x + 12; case 3 : return Math.pow(1 + Math.pow(x, 2), -1); case 4 : default : return 0.5 * (1 + Math.pow(Math.tan(x), 2)) + 1; } } }

Re: M2 Newton 2003-05-22 20:47
jr
Ich hab python genommen, weil es weniger schreibkrams ist (In einer funktionalen Sprache weare es wahrscheinlich noch kuerzer gewesen):

def newton(func, funcd, x, iterations=40, accuracy=1.e-8): for i in range(iterations+1): fx, fdx = eval(func), eval(funcd) if abs(fx) < accuracy: print "Desired accuracy from %s reached after %d iterations" % (accuracy, i-1) return print "Step %d: f(%s)=%s" % (i, x, fx) if fdx==0: print "Division by zero" return x-=fx/float(fdx) print "Desired accuracy from %s not reached after %d iterations" % (accuracy, i)