Nullstellensuche einer Funktion per Näherungsverfahren

Tiyen

Mitglied
Grüße,


ich bin gerade dabei ein Programm zu schreiben das Nullstellen einer Fkt. per Näherungsverfahren berechnen soll.
Also man gibt ein Intervall an, in dem gesucht werden soll. Meine Frage ist, wie kann ich das Intervall so verkleinern, dass es bis auf 5 Nachkommastellen genau ist ?

Java:
import java.util.*;

public class Nullstellensuche {
	public static void main(String[] args) {

		double y,y2;
		
		Scanner input = new Scanner(System.in);
		
		System.out.println("**********Nullstellensuche**********");
		
                // Eingabe der Untergrenze des Intervalls
		System.out.print("Linke Intervallgrenze eingeben : ");
		links = input.nextDouble();
		y = function(y);
		
                // Eingabe der Obergrenze des Intervalls 
		System.out.print("Rechte Intervallgrenze eingeben : ");
		rechts = input.nextDouble();
		y2 = function(y2);	
	}

        // In dieser Methode werden die zwei X-Werte in die Fkt. eingetragen
	public static double function(double y) {

		return (y+1)*(y+1)-1;
	}
}
 
Zuletzt bearbeitet:

sheel

I love Asm
Hi

musst du das per Angabe mit einem Näherungsverfahren machen oder...?
Zeig die Angabe vllt. mal.

Ist die Funktion x^2 + 2x ?
Warum nennst du das y?
 

Tiyen

Mitglied
Hi sheel,

also laut der Aufgabe soll man sich an die Nullstelle mit einer Genauigkeit von 5 Nachkommastellen annähern.

Die Funktion heißt (x+1)²-1

Wegen dem y, hab es mal umbenannt, hat mich auch irgendwie aufgeregt.

Java:
import java.util.*;

public class Nullstellensuche {
	public static void main(String[] args) {

		double links, rechts;
		double genauigkeit = 0.00001;

		Scanner input = new Scanner(System.in);

		System.out.println("**********Nullstellensuche**********");

		System.out.print("Linke Intervallgrenze eingeben : ");
		links = input.nextDouble();

		System.out.print("Rechte Intervallgrenze eingeben : ");
		rechts = input.nextDouble();
	}

	public static double function(double intervallwert) {

		return (intervallwert + 1) * (intervallwert + 1) - 1;
	}
}

Was genau meinst du mit Angabe ? Die Aufgabenstellung vllt ?
 
Zuletzt bearbeitet:

sheel

I love Asm
Mit Angabe hatte ich die Aufgabe gemeint, ja.

Also y=(x+1)^2 -1
(sorry, bin grad zu faul, den Zweier jedesmal hochzustellen. Hoch 2 ist bei mir ^2)
Ergibt
y = x^2 + 2x + 1 - 1
y = x^2 + 2x
Wie oben geschrieben.
Nullstelle 1 ist 0
N2 ist -2

...die Angabe hat hoffentlich vele Einschränkungen,
welche Funktionen das Programm nicht lösen/annähern können muss.
 

HonniCilest

Erfahrenes Mitglied
Muss das Programm beide Nullstellen finden können, wenn diese im Intervall liegen, oder reicht es, wenn eine Nullstelle gefunden wird?
 

sheel

I love Asm
...ist überhaupt ein Intervall gefordert?

Welche Funktionen müssen gelöst werden können?
Polynome vom zweiten Grad? Allgemeine Polynome? ...?

Ist irgendwas zur Näherungsart vorgegeben?

...Angabe...
 

HonniCilest

Erfahrenes Mitglied
Naja wie dem auch sei, brauchst du auf jeden Fall eine Fallbetrachtung...

Ich gehe einmal davon aus, dass hier immer a=1 gilt:
y = (ax + b)² + c
Dann hast du eine nach oben geöffnete Parabel.

Nun kann für y1 = f(x1) und y2 = f(x2) gelten (Fälle für Grenzen nahe Nullstelle sind jeweils zusätzlich zu beachten):
1) Beide y sind negativ --> Innerhalb x1 und x2 gibt es kein f(x) nahe 0.
2) 1 negatives und 1 positives y --> Es gibt genau eine Nullstelle. Hier sollte m.E. yMitte = f(xMitte) berechnet werden. Je nachdem, ob yMitte > 0 oder yMitte < 0 wird die linke oder rechte Hälfte als neues Intervall verwendet. Dies gilt solange bis yMitte nahe 0 ist.
3) Beide y sind positiv --> Hier wäre zu unterscheiden, ob es keine, 1 oder 2 Nullstelle(n) innerhalb des Intervalles gibt.

3a) Keine, wenn c>0 (ich hoffe du darfst c verwenden)
3b) Keine, wenn beide y auf dem gleichen Schenkel sind, d.h. es muss gelten: f(x2)-f(x2-dx)>0 und f(x1)-f(x1+dx)>0, wobei dx sehr klein ist.
3c) 1, wenn c=0, hier würde ich wiederum f(xMitte) berechnen und mich anhand f(xMitte)-f(xMitte+dx) entscheiden, ob die linke oder rechte Hälfte das neue Intervall ist.
3d) Der letzte Fall. Auch hier würde ich mir yMitte = f(xMitte) berechnen, entscheide dich hier solange für ein neues Intervall links oder rechts anhand der Tendenz f(xMitte)-f(xMitte+dx) bis yMitte < 0. Dann gilt Fall 2 für beide Seiten.

Hoffe ich konnte meine Gedanken halbwegs verständlich ausdrücken ^^

PS.: Bitte verzeiht, wenn hier mathemtisch etwas falsch sein sollte, der Unterricht ist nicht gerade gestern gewesen ;)
 
Zuletzt bearbeitet:

Tiyen

Mitglied
Bitte entschuldigt, dass ich jetzt erst schreibe, war den ganzen Tag in der Uni.

Hier ist ersteinmal die Aufgabenstellung:
Entwickeln Sie ein Programm, das im Intervall
[x1, x2] für eine gegebene Funktion f(x) eine Nullstelle mit einer Genauigkeit von fünf
Nachkommastellen findet. Hat das Intervall mehrere Nullstellen, soll irgendeine davon
ermittelt werden. Die Werte x1 und x2 werden vom Benutzer eingegeben. Voraussetzung
ist, dass f(x1) und f(x2) verschiedene Vorzeichen haben, so dass im Intervall
zumindest eine Nullstelle liegt. Ist dies nicht der Fall, soll ein Hinweis ausgegeben werden
und solange nach neuen Werten gefragt werden, bis die Bedingung zutrit. Die
Eingabe zweier gleicher Zahlen (d.h. x1 = x2) beendet das Programm.
 

HonniCilest

Erfahrenes Mitglied
Mit so vielen Einschränkungen ist es ja einfach :)

Du kannst also meine Ausführung auf Fall 2 beschränken. Habe ich nun nachträglich hervorgehobe...
 

Tiyen

Mitglied
die beiden y werte, also das positive und das negative ergibt sich ja daraus, dass man die intervallgrenzen in die funktion einsetzt. Liege ich da richtig ?