Rationalität einer Zahl prüfen
-
Hallo,
brauche Hilfe bei einer wie ich glaube recht simplen Sache.
Ich möchte ein Ergebniss einer beliebigen Rechnung auf Rationalität überprüfen.Gibt es vorgefertigte Funktionen oder ähnliches?
Bin in der Suche nicht wirklich fündig geworden.
-
Als was liegt dein Ergebnis denn vor? Also float? Dann kannst du es vergessen. Es gibt garantiert einen Bruch, der aufgrund der Floating-Point Darstellung den selben Wert hat, wie z.B. sqrt(2).
-
Jede Zahl die in den Standarddatentypen gespeichert wird, ist rational. Für das allgemeine Problem, solltest du mal darlegen, welche Berechnungen du meinst. Ohne groß nachzudenken glaube ich, dass das Problem ganz allgemeingültig gestellt nicht entscheidbar sein könnte.
-
Is ist nicht möglich, mit C++ oder irgendeiner anderen Sprache irrationale Zahlen darzustellen. Irrationale Zahlen würden für die unendlich vielen Nachkommastellen auch unendlich viel Speicherplatz verbrauchen, den es nicht gibt.
-
FinalBlackout schrieb:
Is ist nicht möglich, mit C++ oder irgendeiner anderen Sprache irrationale Zahlen darzustellen. Irrationale Zahlen würden für die unendlich vielen Nachkommastellen auch unendlich viel Speicherplatz verbrauchen, den es nicht gibt.
Das ist gar nicht so schlimm. Du sollst ja eine Entscheidung über das Ergebnis einer Berechnung fällen. Dazu ist es gar nicht notwendig das Ergebnis auch zu haben. Wenn du der Funktion "Wurzel aus 2" vorwirfst, kann sie mit "Ja, ist irrational" antworten, ohne das Ergebnis überhaupt auszurechnen.
-
Das mit dem "Unendlich" Ding hab ich mir auch schon gedacht aber
Natürlich sollte diese Zahl auch ein Ende gesetzt bekommen. in wie weit das nun das Ergebniss beeinflusst hab ich im mom kein Gedanken dran verschwendet.
Die Folgenden 2 Terme sollen eine beliebige Rationale Zahl ausgeben
Wurzel(x²+y³)=
Wurzel(y²+x³)=Welches Ergebniss rauskommt ist soweit ich weiß egal Hauptsache beide sind nicht irrational X und Y sollen nach erfolgreicher Prüfung ausgegeben werden.
Sinn der Sache ist herauszufinden ob es Unendlich viele Lösungen gibt.
Ich habe das von einem Freund aufgeschnappt der dies bei einem Mathewettbewerb gemacht hat. Und nun wollte ich mal wissen wie es um das Thema Rationalitätsüberprüfung steht.
*edit*
Ponto's Post ist interessant aber unter den von mir jetzt geposteten gesichtpunkten keine lösung.
-
ok probieren wir das anders,
wenn wir die zahl beschneiden würden, wäre sie automatisch eine rationale Zahl.
Ich kenn jetzt nicht das Maximum von nachkommastellen (bzw überhaupt maximum) bei den verschiedenen Datentypen in C++ aber ich sage das ich mich damit begnüge das in diesem abschnitt nichts periodisch ist.
Wie überprüfe ich eine zahl ob sie periodisch ist?
Ich weiß jeder mathematiker der das ließt kriegt das blanke brechen.
Denn die Chance das die Zahl die ich beschnitten habe immer noch Irrational ist, unendlich groß. Mir geht es hier auch nur um die funktion dies auf wiedereintreffende zahlenfolgen zu überprüfen.
-
Vergiss es, das macht keinen Sinn. 1 / 113 = 0,0088495575221238938053097345132743. Erkennst du da ne Periode? Trotzdem ist es eine Rationale Zahl. Und genauer kriegst du es glaub ich nicht mal mit double hin. Wenn du mit Brüchen rechnen willst, dann schreib dir eine Rational-Klasse.
Aber ein float daraufhin zu prüfen, ob es eine Rationale Zahl ist, kannst du vergessen.
-
Ich versteh deine Aufgabe noch nicht ganz. Du hast zwei Terme:
Die Frage ist nun, ob es beliebig viele gibt, so dass beide Terme eine rationale Zahl ergeben.
Sehe ich das richtig? Oder kommen x,y aus einem anderen Wertebereich?
-
Optimizer schrieb:
Vergiss es, das macht keinen Sinn. 1 / 113 = 0,0088495575221238938053097345132743. Erkennst du da ne Periode? Trotzdem ist es eine Rationale Zahl. Und genauer kriegst du es glaub ich nicht mal mit double hin. Wenn du mit Brüchen rechnen willst, dann schreib dir eine Rational-Klasse.
Aber ein float daraufhin zu prüfen, ob es eine Rationale Zahl ist, kannst du vergessen.man könnte einfach mal für testhalber alle ganzen zahlen von 1 bis 100000 die zu untersuchende zahl mit der ganzen zahl plutimizieren. und wenn das ergebnis ganz dict an ner ganzen zahl liegt, war sie im rahmen der messgenauigkeit ne rationale zahl.
ok, es ist nicht echt genau, aber für ne computer-untersuchung des problems durchaus angemessen. also um ein gefühl für das problem zu kriegen. ich mache sowas gerne, bevor ich mit "echter mathematik" anfange.
-
Glaubst du nicht, dass du eine Wurzel finden kannst, die multipliziert mit einer ganzen Zahl "in der Nähe" einer weiteren ganzen Zahl liegt?
Ich bin ehrlich gesagt nicht überzeugt. Und jetzt ist mir noch nicht mal klar, warum man sowas überhaupt braucht.
-
Würdest du 21,991148575128552669238503682957 als "in der Nähe von einer ganzen Zahl" betrachten? Das ist PI * 7. Es lassen sich mit Sicherheit noch Beispiele finden, wo es noch viel näher an einer ganzen Zahl liegt.
-
Optimizer schrieb:
Würdest du 21,991148575128552669238503682957 als "in der Nähe von einer ganzen Zahl" betrachten? Das ist PI * 7. Es lassen sich mit Sicherheit noch Beispiele finden, wo es noch viel näher an einer ganzen Zahl liegt.
wo du schon die 113 ins rennen geschickt hast, nehmen wir doch mal PI*113.
354,99996985564663594627870231058
und? ist weit weg, finde ich. ein wenig am programm einstellen darf man ja.
und wenn es manchmal lügt, isses auch nicht schlimm. vermutlich wird es irgendwie "selten" lügen. und wenn man erstmal ne vermutliche lösung wie PI=355/113 hat, kann man die vermutliche lösung ja auch mit "echter mathematik" nochmal auf glaubwürdigkeit prüfen.
-
Gut, du hast eine relativ hohe Wahrscheinlichkeit, dass die Aussage von dem Programm stimmt. Und was nützt dir des? Mir ist das so schleierhaft, wofür man sowas brauchen soll.
Wenn man ein Algebra-Programm schreibt, muss das Programm mit Symbolen rechnen können, alles andere ist nichts wert.
Wenn man mit Brüchen rechnen will, schreibt man sich ne Bruchklasse.
Wenn man mit Wurzeln rechnen will, schreibt man sich ne Wurzelklasse.Das macht für mich alles keinen Sinn. Und es ist absolut gegen mein mathematisches Verständnis.
-
Optimizer schrieb:
Das macht für mich alles keinen Sinn. Und es ist absolut gegen mein mathematisches Verständnis.
ok, was tust du davon halten:
so polynome wie y=x5-5x4+3x^2+8x-7 kann man normalerweise symbolisch gar nicht nach y=0 auflösen.
aber manchmal haben sie die eine oder andere ganzzahlige nullstelle.
man kann sie herrlich numerisch lösen, kommt aber wegen rechenfehlern nur auf zahlen wie 4.9999999367764.
macht doch nix. hat man ne 4.9999999367764 kann der rechner automatisch vermuten!, daß es ne ganze zahl ist und dann die ganze zahl reinstecken und dann ganz ordentlich ganzzahlig, symbolisch oder wie auch immer die probe machen und nachweisen, daß es ne ganze zahl ist.
-
aber manchmal haben sie die eine oder andere ganzzahlige nullstelle
Wieso sollte die ganzzahlig sein? Die könnte auch wirklich 4.9992876534865 sein.
Die Algebra-Programme lösen Gleichungen, wenn möglich, immer durch algebraische Umformungen. Zwar gebe ich gerne zu, dass das nicht immer möglich ist und deshalb auch mal numerisch gearbeitet werden muss. Aber ich glaube nicht, dass so ein Programm dann einfach annimmt, "45.00928369782 soll 45 heißen".
Was ich mir noch vorstellen könnte, dass er diese Zahl dann einsetzt und noch darum herum probiert, so dass das Ergebnis möglichst exakt ist. Wenn dann tatsächlich 45 rauskommt, liegt das aber IMHO an der Aufgabenstellung und nicht daran, weil er einfach mal auf die nächste Ganzzahl gerundet hat.
-
das wird jetzt unspaßig. du machst den eindruck, meine postings nicht gelesen zu haben. also zum letzten mal:
Optimizer schrieb:
aber manchmal haben sie die eine oder andere ganzzahlige nullstelle
Wieso sollte die ganzzahlig sein? Die könnte auch wirklich 4.9992876534865 sein.
jo, sie könnte. aber manchmal sind auch ein paar nullstellen ganzzahlig. wie du unten richtig erforscht hast, hängt von der aufgabenstellung ab, ob ganzzahlige nullstellen da sind.
Die Algebra-Programme lösen Gleichungen, wenn möglich, immer durch algebraische Umformungen. Zwar gebe ich gerne zu, dass das nicht immer möglich ist und deshalb auch mal numerisch gearbeitet werden muss. Aber ich glaube nicht, dass so ein Programm dann einfach annimmt, "45.00928369782 soll 45 heißen".
das sagte ja auch keiner.
Was ich mir noch vorstellen könnte, dass er diese Zahl dann einsetzt und noch darum herum probiert, so dass das Ergebnis möglichst exakt ist. Wenn dann tatsächlich 45 rauskommt, liegt das aber IMHO an der Aufgabenstellung und nicht daran, weil er einfach mal auf die nächste Ganzzahl gerundet hat.
äh. hab ich was anderes vorgeschlagen?
ich hab nur treffendere worte verwandt. das zauberwort "probe".
nimm an, das numerische suchverfahren fände bei x3-3x2+x3-1 eine 0.9999563 als nullstelle. das programm braucht jetzt nicht zu versuchen, die 0.9999563 genauer zu kriegen. aber es kann vermuten, daß damit 1 gemeint was. und dann kommt der geheime fünftklässlertrick: die probe!
man setzt in die einfache ausgangsgleichung sein kompliziert berechnetes ergebnis ein.
y=x3-3x2+x3-1 mit x=1 wird zu
y=13-3*12+1*3-1
und das läßt sich jetzt ganzahlig berechnen. keine division dabei!
y=1-3+3-1
y=0
jo, stimmt.
so *könnte* ein polynomlöser bei zahlen, die dicht an ganzen zahlen sind, die ganzzahligeit nachweisen (falls ganzzahligkeit vorliegt) oder widerlegen (falls sie eben nicht vorliegt).
-
@Ponto: Ja, so habe ich jedenfalls die Aufgabenstellung verstanden. X und Y kommen aus keinem "anderen Wertebereich".
@Optimizer: Wieso müssen Projekte immer ein sinn haben ?
naja es hat mich mehr oder minder interessiert wie man sowas annäherungsweise realisieren könnte
@Volkard: Ich muss sagen dein Mathematisches Verständniss ist echt überragend, und das Verständniss dafür das ich mich der Lösung wenigstens (wenn auch an der Unendlichkeit gespielgelt) minimal nähern möchte.
Also ich denke ich hab mehr oder Weniger ein Disskusion losgetreten die nicht viel mehr als jetzt bringen wird
War trotzdem aufschlussreich (finde ich zumindest)
-
Alithecoaster schrieb:
@Ponto: Ja, so habe ich jedenfalls die Aufgabenstellung verstanden. X und Y kommen aus keinem "anderen Wertebereich".
Dann gibt es beliebig viele Lösungen. Fur jede natürliche Zahl gibt es ein , so dass gilt , womit eine Lösung ist.