Falsche Ergebnisse bei PQ-Formel Berechnung

ehlr

Aktives Mitglied
Hallo.
Ich möchte mit meinem Programm durch Eingabe von zwei Variablen (p und q) die PQ-Formel zur Berechnung der Nullstellen einer Parabel benutzen.
Leider erhalte ich immer ein falsches Ergebnis.

Bsp. : Ich gebe folgendes ein : p=7 q=4. Als Ergebnis müsste für X1 = -6,4 und für X2 = 0,6 ausgegeben werden. Jedoch wird X1 = -2,5 und X2 = -4,5 ausgegeben.

Quelltext, den ich bisher erarbeitet habe :

Java:
double x1new = -(x1/2) + ( ( (x1/2)*(x1/2) - x2 ) / ( (x1/2)*(x1/2) - x2 ) ) ; // PQ Formel 
double x2new = -(x1/2) - ( ( (x1/2)*(x1/2) - x2 ) / ( (x1/2)*(x1/2) - x2 ) ) ; // ""
					
DecimalFormat f = new DecimalFormat("#.000000000000000"); // 1 Vorkommastelle und 15 Nachkommastellen
String ausgabex1 = f.format(x1new); // Double x1 -> String
String ausgabex2 = f.format(x2new); // Double x2 -> String
					
lbl5.setText(ausgabex1); // Ausgabe x1
lbl6.setText(ausgabex2); // Ausgabe x2


PQ Formel :

pq-formel.jpg

copyright : www(.)pqformel(.)de



lg
ehlr
 
Zuletzt bearbeitet:
mach mal einen Import von der java.lang.Math;

Code:
double x1new = -(x1/2) + Math.sqrt(Math.pow((x1/2), 2) - x2);
müsste dann x1 ergeben.
 
Hi,

in der PQ-Formel kommt eine Wurzel vor, in deinen Berechnungen nicht.

Wurzel ist ja eigentlich nichts anderes als durch sich selber teilen.
Das hier ersetzt ja die Wurzel :

( (x1/2)*(x1/2) - x2 ) / ( (x1/2)*(x1/2) - x2 )


mach mal einen Import von der java.lang.Math;

Code:
double x1new = -(x1/2) + Math.sqrt(Math.pow((x1/2), 2) - x2);
müsste dann x1 ergeben.

X1 ist dann aber 1,208712152 und nicht -6,4
 
Zuletzt bearbeitet:
genau, Du teilst ja Deinen Term durch sich selbst, das ist ja nicht die Definition der Wurzel.

Dennoch, schau Dir meinen Code mal an und auch die java.Lang.Math, denn genau dazu ist sie doch da 🙂 Eigene Implementierung birgt immer Fehler, die Du so nicht machst, sofern die Methoden richtig implementiert sind. Aber das wäre mittlerweile wohl rausgekommen.

btw, ich bekomme mit meinem Code das korrekte Ergebnis, sofern die Formel stimmt, die Du hingeschrieben hast.
 
Deine Variablen sind auch ungünstig benannt:

Warum p und q nicht auch einfach so nennen anstatt x1 und x2?
Dann sind die Namen auch frei und du musst nicht x1new und x2new
nehmen. Klingt banal aber solche Sachen helfen enorm dabei den
Code zu verstehen.
 
genau, Du teilst ja Deinen Term durch sich selbst, das ist ja nicht die Definition der Wurzel.

Dennoch, schau Dir meinen Code mal an und auch die java.Lang.Math, denn genau dazu ist sie doch da 🙂 Eigene Implementierung birgt immer Fehler, die Du so nicht machst, sofern die Methoden richtig implementiert sind. Aber das wäre mittlerweile wohl rausgekommen.

btw, ich bekomme mit meinem Code das korrekte Ergebnis, sofern die Formel stimmt, die Du hingeschrieben hast.

Leider bekomme ich mit dem Code auch ein falschen Ergebnis :
Java:
double pdurch2 = x1/2;
double x1new = - pdurch2 + Math.sqrt(Math.pow(pdurch2, 2) - x2);
double x2new = - pdurch2 - Math.sqrt(Math.pow(pdurch2, 2) - x2);

Siehe Bildschirmfoto :

picmb.png



In rot ist das richtige Ergebnis.
 
Der Code funktioniert doch prima:
Java:
		double p = 6d;
		double q = -4d;

		double pdurch2 = p/2;
		double x1new = - pdurch2 + Math.sqrt(Math.pow(pdurch2, 2) - q);
		double x2new = - pdurch2 - Math.sqrt(Math.pow(pdurch2, 2) - q);

		System.out.println(x1new);
		System.out.println(x2new);
Lässt du dir vllt andere Werte im Label anzeigen?
 
Ich sagte doch bereits, dass du den ganzen Code posten sollst, denn der Fehler liegt an einer Stelle, die du uns nicht gezeigt hast:
x1 und x2 haben bei dir denselben Wert, nämlich den von p.
 
Der Code funktioniert doch prima:
Java:
		double p = 6d;
		double q = -4d;

		double pdurch2 = p/2;
		double x1new = - pdurch2 + Math.sqrt(Math.pow(pdurch2, 2) - q);
		double x2new = - pdurch2 - Math.sqrt(Math.pow(pdurch2, 2) - q);

		System.out.println(x1new);
		System.out.println(x2new);
Lässt du dir vllt andere Werte im Label anzeigen?

Um es dann im Label anzuzeigen habe ich noch..... hier der Code :

Java:
  double pdurch2 = x1/2;
				    double potenz = Math.pow(pdurch2, 2);
					double x1new = - pdurch2 + Math.sqrt(potenz - x2);
					double x2new = - pdurch2 - Math.sqrt(potenz - x2);  //-(x1/2) - ( ( (x1/2)*(x1/2) - x2 ) / ( (x1/2)*(x1/2) - x2 ) )
					
					DecimalFormat f = new DecimalFormat("#.000000000000000"); // mind. 1 vorkommastelle und x nachkommastellen
					String ausgabex1 = f.format(x1new); // x1 double wird in string ausgabex1 gewandelt
					String ausgabex2 = f.format(x2new); // x2 double wird in string ausgabex1 gewandelt
					
					lbl5.setText(ausgabex1); //ausgabe x1
					lbl6.setText(ausgabex2); //ausgabe x2


Und so hole ich es aus dem Label raus :

Java:
x1 = Double.parseDouble(field1.getText()); // eingabe string -> double
					x2 = Double.parseDouble(field1.getText()); // "
 
Okay... Leute ich sollte mich schämen 😳😳😳😳

Java:
p = Double.parseDouble(field1.getText()); // eingabe string -> double
q = Double.parseDouble(field1getText()); // "
Da oben ist p = field1 und q = field 1 *schäm*

Tut mir Leid, war wohl ein Anfängerfehler 🙁


Danke für eure Hilfe!!!
 

Neue Themen


Zurück
Oben